2012-02-23 69 views
6

我有一個關於將datareader轉換爲datatable的問題。在我的代碼中,我有一個datareader在一個類中創建並傳遞給另一個類,我想將它轉換爲datatable如何將數據讀取器轉換爲數據表

當我這樣做時,它似乎不工作,因爲表格仍爲空。如果我在同一個函數中進行轉換,它可以正常工作。

它只有當我通過datareader到另一個功能,它停止工作。這是因爲dr已關閉嗎?我如何克服這個問題?任何幫助都會很棒。

+0

您不應該傳遞'DataReader',因爲您完全錯過了處理對象或幾次數據不會再出現的地方。你可以編輯正在使用的方法,即返回'DataReader'之前的方法嗎?因此,舉例來說,您可以向該方法添加一個DataTable屬性,並在返回之前填充它,以便您可以在該類之外抓取... – balexandre 2012-02-23 12:40:26

+1

不,我被指示只返回一個數據讀取器。其邏輯是,通過數據讀取器的函數可以在其他地方使用 – jason 2012-02-23 12:47:37

回答

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 – 2012-02-23 12:53:42

+0

感謝您的迴應。無論如何不知道連接或參數來做到這一點?我通過的唯一的東西就是數據讀取器。謝謝 – jason 2012-02-23 13:49:19

+0

ParamArray是可選的,所以你不需要傳遞任何參數:),請將我的anser標記爲正確 – HndlCode 2012-02-26 19:07:14

39

使用的DataTable Load()方法。

// Given a DataReader called "reader" 
DataTable dt = new DataTable(); 
dt.Load(reader)