Использование DataAdapter .Update для вставки / обновления строк в наборе данных (не на основе БД PK) - PullRequest
1 голос
/ 10 ноября 2008

У меня есть пакетный процесс, который считывает данные из нескольких таблиц в набор данных на основе общего ключа. Затем я строю второй набор данных из целевых данных, запрашивающих тот же ключ.

На данный момент у меня есть два набора данных, которые являются структурно идентичными (с точки зрения расположения таблицы / столбца). Затем у меня есть процесс, который добавляет любую строку, которая существует в источнике, к набору данных назначения. Кроме того, процесс попытается обновить определенные столбцы на основе общего ключа.

Проблема возникает, когда вызывается команда DataAdapter.UPDATE с существующими строками, которые необходимо обновить. Ошибка: System.InvalidOperationException не было обработано Сообщение = "Таблица, указанная в операторе SELECT, не содержит уникальный ключ или столбец идентификатора, или инструкция SELECT не включает в себя все ключевые столбцы."

Поскольку у меня нет способа контролировать, какой PK находится в целевой БД, есть ли способ сообщить адаптеру, какой ключ для этого конкретного обновления? У меня есть «пользовательский» набор первичных ключей для каждой таблицы данных в наборе данных.

Это пакетный процесс, не связанный с пользователем, и его требования к производительности довольно низки. (чтобы объяснить использование наборов данных и т. д.)

Есть мысли?

Ответы [ 2 ]

1 голос
/ 18 января 2009

профилируйте БД и посмотрите, какие запросы запускаются. скопируйте запросы из Profiler и попытайтесь выполнить их вручную. если они терпят неудачу, то проблема с sql, и ошибка исходит от db и просто передается вашему приложению.

это должно как минимум сказать вам, если проблема вызвана отсутствием реальных ПК в БД.

0 голосов
/ 10 ноября 2008

вы должны установить PK для каждой таблицы в наборе данных, как вы сделали. Я не думаю, что у адаптера есть способ выяснить, что такое ПК. если есть, и кто-то знает это, я весь слух.

...