2008-11-10 5 views
1

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

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

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

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

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

Любые мысли?

ответ

0

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

+0

Я установил PK и продолжаю получать ошибку (которая в справочных документах указывает на фактическую БД, не имеющую жизнеспособного ПК) – WIDBA 2008-11-10 17:19:18

1

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

это должно хотя бы сказать, если проблема вызвана отсутствием реальных PK в db.