【发布时间】:2015-12-29 04:53:16
【问题描述】:
只是为了记录我要添加的未来问题 将数据提取到datagridview,我知道代码远非水晶般清晰,只是为了理解这个主题的属性。
CreateDataTable(Me.t, "SELECT * FROM tblContacts", "tblContacts")
CreateDataTable(Me.t2, "SELECT * FROM ContactsData", "ContactsData")
Dim joined = From row1 In t.AsEnumerable()
Join row2 In t2.AsEnumerable()
On row1.Field(Of Int32)("ID") Equals row2.Field(Of Int32)("ID")
Select BothRows = New With {row1, row2}
With DataGridView1
.Columns.Clear()
.Rows.Clear()
' add columns of tblContacts table
For i = 0 To joined.AsEnumerable.First.row1.Table.Columns.Count - 1
.Columns.Add(joined.AsEnumerable.First.row1.Table.Columns(i).ColumnName.ToString, joined.AsEnumerable.First.row1.Table.Columns(i).ColumnName.ToString)
Next
' add columns of ContactsData table
For i = 0 To joined.AsEnumerable.First.row2.Table.Columns.Count - 1
.Columns.Add(joined.AsEnumerable.First.row2.Table.Columns(i).ColumnName.ToString, joined.AsEnumerable.First.row2.Table.Columns(i).ColumnName.ToString)
Next
' add rows to datagridview
.Rows.Add((joined.Count - 1))
End With
Dim rownum As Integer = 0
For Each x In joined
Dim row1 As DataRow = x.row1
Dim row2 As DataRow = x.row2
' populate data to dgv
For i = 0 To row1.Table.Columns.Count - 1
DataGridView1.Rows(rownum).Cells(i).Value = row1.Item(i).ToString
Next
For i = row1.Table.Columns.Count To DataGridView1.Columns.Count - 1
DataGridView1.Rows(rownum).Cells(i).Value = row2.Item(i - row1.Table.Columns.Count).ToString
Next
rownum += 1
Next
经过测试@Tim 的回答如下: 我对 linq to dataset 进行了测试,但出现错误,我不知道为什么.. 错误描述是'值不能为空。参数名称:source' 以防万一我测试了一个常规的 SQL 内连接查询并且它工作正常。
我在 access 中创建了 2 个表,这是这些表
tblCOntacts
--------------
ID FirstName LastName
---------------------------------
22 John Smith
23 Jane Apple
24 Jonathan Tucker
ContactsData
--------------
ID Proffesion Hoby
---------------------------------
22 Carpenter Long Runs
23 Pilot Gym
24 Psychologyst Programming
这是我的代码,我注释了导致错误的行:
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
CreateDataTable(Me.t, "SELECT * FROM tblContacts", "tblContacts")
CreateDataTable(Me.t2, "SELECT * FROM ContactsData", "ContactsData")
Dim joined = From row1 In t.AsEnumerable()
Join row2 In t2.AsEnumerable()
On row1.Field(Of Int32)("ID") Equals row2.Field(Of Int32)("ID") ' here i get the error: Value cannot be null. Parameter name: source
Select BothRows = New With {row1, row2}
For Each x In joined
Dim row1 As DataRow = x.row1
Dim row2 As DataRow = x.row2
Next
end sub
Public con As OleDbConnection
Public dset As DataSet
Public ad As OleDbDataAdapter
Public cmd As OleDbCommand
Public t As DataTable
Public t2 As DataTable
Private Sub CreateDataTable(ByVal tb As DataTable, ByVal query As String, ByVal table As String)
Dim q As String = query
con = New OleDbConnection
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Jonathan\Desktop\בסיס נתונים access\AddressBook.mdb"
con.Open()
dset = New DataSet
cmd = New OleDbCommand(query, con)
ad = New OleDbDataAdapter(cmd)
ad.Fill(dset, table)
con.Close()
' query dataset with linq
tb = dset.Tables(table)
end sub
我有 2 个来自不同 Access 数据库的数据表(所以我不能使用 SQL 连接语句),我需要通过相同的数字主键匹配来自 2 个表的记录中的 2 列。 我正在考虑 2 个选项:
- 多个 SQL SELECT 查询。
- 使用 Visual Basic 对 2 个数据表对象进行二分搜索。
什么方法更有效?更专业?这样做的正确方法是什么?
坦克
【问题讨论】: