2012-01-30 21 views
2

假設Customer表具有Address1和Address2列。用VS 2008嚮導創建類型化的DataSet 後,我寫了下面的代碼:ADO.NET DataTable.Merge()方法不能按預期方式工作

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") 

我預期地址2等於「B1」,但它實際上包含了爲DBNull。爲什麼?

回答

0

從文檔上DataSet.Merge Method (DataTable)

當合並新的源數據集到目標,任何來源的行 與不變一個的DataRowState值,修改或刪除是 匹配具有相同的目標行主鍵值。 DataRowState值爲「已添加」的源行 與新的目標行相匹配,其中 的主鍵值與新的源行相同。

您是否在DataTable上建立主鍵?這在事情的表現上有很大的不同。

合併後您有多少行?即使你確實有主鍵,我也希望你現在擁有的是2行(除非你使用的是身份,2個數據表使用相同的數字),一個在Addres1中有「a1」,另一個在地址2中的「b1」。仔細查看關於添加行的行爲以瞭解其原因。