ADO.NET DataTable.Merge()方法无法按预期工作

时间:2012-01-30 08:16:02

标签: ado.net strongly-typed-dataset

假设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。为什么呢?

1 个答案:

答案 0 :(得分:0)

来自DataSet.Merge Method (DataTable)的文档:

  

将新的源DataSet合并到目标中时,任何源行   DataRowState值为Unchanged,Modified或Deleted的   匹配具有相同主键值的目标行。源行   DataRowState值为Added与新目标行匹配   与新源行相同的主键值。

您是否在DataTable上建立了主键?这对事情的表现产生了很大的影响。

合并后你有多少行?即使你确实有一个主键,我希望你现在拥有的是2行(除非你使用了一个标识并且2个DataTables在同一个数字上),一个在Addres1中有一个“a1”而另一个在地址2中的“b1”。仔细查看它对添加行的行为的说法,以了解原因。