2012-02-23 48 views
6

datareaderdatatableに変換する質問があります。私のコードでは、私はdatareaderを1つのクラスで作成し、datatableに変換したい別のクラスに渡しました。datareaderをdatatableに変換する方法

これを行うと、テーブルが空のままであるため、動作していないように見えます。私が同じ関数で変換を行うと、うまく動作します。

私がdatareaderを別の機能に渡すときは、は動作を停止します。これはdrが閉鎖されているかどうかですか?どうすればこの問題を解決できますか?どんな助けも素晴らしいだろう。

+0

オブジェクトを完全に見逃してしまったり、もはやデータが存在しなくなることがあるので、決して「DataReader」を渡すべきではありません。 'DataReader'を返す前に、使用中のメソッドを編集できますか?例えば、 'DataTable'プロパティをそのメソッドに追加して、戻り値の前にそれを設定して、その' class'の外側につかむことができます。 – balexandre

+1

いいえ、私はdatareaderを返すよう指示されました。ロジックは、データウェアを渡す関数が他の場所で使用できるということです。 – jason

答えて

2

チェックこのアウト:

Public Function ExecuteQuery(ByVal s As String, ByVal condb As SqlConnection, ByVal ParamArray params() As SqlParameter) As DataTable 
     Dim dt As DataTable = Nothing 
     Using da As New System.Data.SqlClient.SqlDataAdapter(s, condb)    
      dt = New DataTable 
      If params.Length > 0 Then 
       da.SelectCommand.Parameters.AddRange(params) 
      End If 
      If da.SelectCommand.Connection.State <> ConnectionState.Open Then da.SelectCommand.Connection.Open() 
      da.Fill(dt)      
     End Using 
     Return dt 
End Function 
+0

+1、いいです。@HndlCode –

+0

応答に感謝します。接続やパラメータを知らなくてもこれを行うにはどうしていますか?私が渡した唯一のことは、データウェアハウスです。ありがとう – jason

+0

ParamArrayはオプションですので、パラメータを渡す必要はありません:)私のanserを右にマークしてください – HndlCode

39

使ったDataTable Load()方法。

// Given a DataReader called "reader" 
DataTable dt = new DataTable(); 
dt.Load(reader) 
関連する問題