假设Customer表有Address1和Address2列。创建类型化数据集后 使用VS 2008向导,我编写了以下代码:
Dim t1 As MyDataSet.CustomerDataTable = New MyDataSet.CustomerDataTable
Dim r1 As MyDataSet.CustomerRow = t1.NewCustomerRow()
r1.Address1 = "a1"
t1.Rows.Add(r1)
Dim t2 As MyDataSet.CustomerDataTable = New MyDataSet.CustomerDataTable
Dim r2 As MyDataSet.CustomerRow = t2.NewCustomerRow()
r2.Address2 = "b1"
t2.Rows.Add(r2)
t1.Merge(t2, True)
Dim row As DataRow = t1.Rows(0)
Dim address2 As String = row("Address2")
我希望address2等于" b1",但它实际上包含DBNull。为什么呢?
答案 0 :(得分:0)
来自DataSet.Merge Method (DataTable)的文档:
将新的源DataSet合并到目标中时,任何源行 DataRowState值为Unchanged,Modified或Deleted的 匹配具有相同主键值的目标行。源行 DataRowState值为Added与新目标行匹配 与新源行相同的主键值。
您是否在DataTable上建立了主键?这对事情的表现产生了很大的影响。
合并后你有多少行?即使你确实有一个主键,我希望你现在拥有的是2行(除非你使用了一个标识并且2个DataTables在同一个数字上),一个在Addres1中有一个“a1”而另一个在地址2中的“b1”。仔细查看它对添加行的行为的说法,以了解原因。