Метод ADO.NET DataTable.Merge () не работает должным образом - PullRequest
2 голосов
/ 30 января 2012

Допустим, в таблице 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 голосов
/ 31 января 2012

Из документации по Метод DataSet.Merge (DataTable) :

При объединении нового исходного DataSet с целевым, любые исходные строки со значением DataRowState Неизменным, Измененным или Удаленным являются соответствует целевым строкам с одинаковыми значениями первичного ключа. Исходные строки с добавленным значением DataRowState добавлены новые целевые строки с те же значения первичного ключа, что и в новых исходных строках.

Вы установили первичный ключ в своей таблице данных? Это сильно влияет на то, как все себя ведет.

Сколько строк у вас есть после слияния? Даже если у вас есть первичный ключ, я ожидаю, что теперь у вас будет 2 строки (если вы не используете идентификацию и 2 таблицы данных не совпадают): один с «a1» в Addres1, а другой с «b1» в Address2. Внимательно посмотрите, что говорится о поведении добавленных строк, чтобы понять, почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...