OleDbDataAdapter.Update() с OleDbCommandBuilder

Я обращаюсь к базе данных Oracle с помощью C# и OleDb, я успешно извлек данные из запроса, но не могу обновить базу данных с помощью OleDbAdapter.Update(), мой код обновления приведен ниже. («Адаптер» — это ссылка на объект OleDbAdapter, используемый для успешного извлечения данных из базы данных.)

OleDbCommandBuilder builder = new OleDbCommandBuilder(Adapter);
Adapter.UpdateCommand = builder.GetUpdateCommand();
Adapter.UpdateCommand.Prepare();
Adapter.Update(ds);
ds.AcceptChanges();

В настоящее время я получаю сообщение «Команда не подготовлена». ошибка в первой строке приведенного выше кода. Любые предложения, и я был бы очень признателен.

(Редактировать: ds - это набор данных)


person Yends    schedule 31.08.2011    source источник
comment
довольно сложно сказать, не видя, что возвращает сборка. Иногда билдер не может собрать команду из вашего Select — можете ли вы предоставить нам оба — select-query и сгенерированное обновление?   -  person Random Dev    schedule 31.08.2011
comment
Как я могу получить сгенерированное обновление? Обратите внимание, что код выдает исключение в первой строке (OleDbCommandBuilder builder = new OleDbCommandBuilder(Adapter);), поэтому Adapter.UpdateCommand заранее имеет значение null. Мой запрос выбора на самом деле представляет собой хранимую процедуру, которая извлекает идентификатор, имя и фамилию из простой таблицы.   -  person Yends    schedule 31.08.2011
comment
извините, пропустил комментарий в первой строке - точно не знаю, но правильно ли выбран выбор в адаптере? Пожалуйста, установите точку останова и проверьте объект адаптера для этих команд.   -  person Random Dev    schedule 31.08.2011
comment
Выбор — это хранимая процедура, которая извлекает правильные данные из базы данных, я тщательно протестировал ее. Спасибо за ваши ответы.   -  person Yends    schedule 01.09.2011
comment
хорошо - как CommandBuilder может генерировать обновление на основе хранимой процедуры? Вы должны сами придумать такое update-выражение.   -  person Random Dev    schedule 01.09.2011
comment
вау, хорошо, я думал, что сборщик команд просмотрел возвращенный набор данных, но размышление о более сложных примерах, которые не являются просто одной таблицей, имеет смысл, спасибо за вашу помощь.   -  person Yends    schedule 01.09.2011


Ответы (1)


ваша версия не работает, потому что вы запрашиваете хранимую процедуру.

Если подумать: для работы ему нужна вся информация, например, ключи и так далее. Что, если вы соедините таблицы в своей хранимой процедуре и выберете только подмножество строк без некоторых важных первичных ключей?

В этих случаях вам может потребоваться написать/получить хранимую процедуру или запросить самостоятельно и передать ее адаптеру.

person Random Dev    schedule 01.09.2011
comment
Спасибо, что осенило меня после вашего последнего комментария, имеет смысл, если подумать. - person Yends; 01.09.2011