2012-02-23 38 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)