所以我有一个记录集,我想用它填充两个数据表,但它只填充第一个数据表。
Dim da As New OleDb.OleDbDataAdapter
Dim dt1 As New DataTable
Dim rs1 As New ADODB.Recordset
rs1.Open("select * from table",conn,ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockReadOnly)
da.Fill(dt1, rs1)
rs1.MoveFirst()
da = New OleDb.OleDbDataAdapter
Dim dt2 As New DataTable
da.Fill(dt2, rs1)
所以第一个数据表(dt1)中有数据,但 dt2 是空的,我不知道为什么。我尝试了 MoveFirst() 但它没有改变任何东西
如果您使用的是 VB.Net,而不是 VBA 或 VBScript,则不应该使用旧的 ADODB 类型,例如
RecordSet
。它们仅在向前移植旧代码时为了向后兼容而存在,并且不应用于新的开发。您绝对不能在同一个地方混合搭配旧的 adodb 和新的 ADO.Net。坚持使用 ADO.Net:
Dim dt1 As New DataTable()
Dim dt2 As New DataTable()
Using conn As New OleDb.OleConnection("connection string here"), _
cmd As New OleDb.OleDbCommand("select * from table"), _
da As New OleDb.OleDbAdataAdapter(cmd)
' When using .Fill() you don't even need to call .Open()
da.Fill(dt1)
da.Fill(dt2)
End Using