如何将Datareader转换为Datatable

8
我有一个问题,关于将datareader转换为datatable。在我的代码中,我创建了一个datareader对象,在一个类中传递到另一个类时,我想将其转换为datatable
但是当我这样做时,它似乎不起作用,因为表格保持为空。如果我在同一个函数中进行转换,它可以正常工作。
只有当我将datareader传递给另一个函数时,它就会停止工作。这是因为dr已关闭或其他原因吗?如何解决这个问题?任何帮助都将不胜感激。

你不应该传递DataReader,否则你将完全忽略了释放对象的步骤,或者数据可能已经不存在了。你能否编辑正在使用的方法,在返回DataReader之前进行修改?例如,你可以在该方法中添加一个DataTable属性,并在返回之前填充它,这样你就可以在该class之外获取到数据了。 - balexandre
1
不,我被指示只返回一个数据读取器。这样做的逻辑是传递数据读取器的函数可以在其他地方使用。 - jason
2个回答

54

使用 DataTable 的 Load() 方法。

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

reader.Read() 需要在之前被调用吗?如果 reader 中有多行数据,它们是否都会被复制到 DataTable 中? - Arkane
1
你不需要在之前调用Read方法。最好不要这样做。我猜如果你这样做,你会错过第一条记录。 - Ben

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

谢谢您的回复。有没有办法在不知道连接或参数的情况下完成这个操作?我所传递的唯一东西是数据读取器。谢谢。 - jason
ParamArray是可选的,因此您不需要传递任何参数:),请将我的答案标记为正确。 - HndlCode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接