Как создать операторы обновления для объектов TableAdapter в Visual Studio? - PullRequest
1 голос
/ 29 апреля 2010

Я работаю над разработкой поставщика данных ADO.NET и связанного поставщика DDEX. Я не могу убедить мастер настройки Visual Studio TableAdapater сгенерировать операторы SQL для обновления таблицы данных после вставок и обновлений. Он генерирует операторы вставки и удаления, но не производит операторы выбора для обновления.

Доступ к упомянутой функциональности можно получить, перетащив таблицу из обозревателя серверов (внутри Visual Studio) в DataSet (например, DataSet1.xsd). Он создает объект TableAdapter и настраивает операторы SELECT, UPDATE, DELETE и INSERT. Если щелкнуть правой кнопкой мыши объект TableAdapter, в контекстном меню появится параметр «Настроить», который запускает «Мастер настройки TableAdapter». В первом диалоговом окне этого мастера есть кнопка «Дополнительные параметры», которая приводит к опции «Обновить таблицу данных». При использовании с таблицами SQL Server этот параметр приводит к добавлению оператора формы «select field1, field2,…» в конец команд для команд InsertCommand и UpdateCommand в TableAdapter.

Есть ли у вас какие-либо идеи о том, какое свойство типа или интерфейс может потребоваться предоставить поставщику DDEX (или, возможно, поставщику данных ADO.NET), чтобы Visual Studio добавила эти операторы обновления в команды обновления / вставки?

В документации MSDN для диалогового окна Advanced SQL Generation Options есть примечание, гласящее: «Обновление таблицы данных поддерживается только в базах данных, которые поддерживают пакетирование операторов SQL». Похоже, что a. Поставщику данных NET может потребоваться предоставить какое-либо свойство, указывающее, что такое поведение поддерживается. Но я не могу найти это. Есть идеи?

1 Ответ

0 голосов
/ 30 апреля 2010

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

Если вы вызываете метод вставки адаптера таблицы и передаете datarow или datatable для операции вставки, tableadapter обновит datatable / datarow, чтобы отразить последние значения из базы данных после операции вставки. Если ваша таблица в базе данных имеет уникальный идентификатор или автоматический номер для команды вставки для данной строки для вставки, столбец p.key исходного datarow будет отражать значение автоматически генерируемого идентификатора из базы данных. Об этом обновлении позаботится табличный адаптер, если вы установили для параметра обновления значение true в конфигурации мастера.

Теперь к этому «обновленному» табличному адаптеру будет выполнено 2 запроса в одном пакете, сначала будет вставка, затем выбор с помощью scope_identity.

EDIT

Моя команда вставки по умолчанию запускает этот единственный SQL, если в TableAdapter отключено обновление

INSERT INTO Table (coloumns) VALUES (values);

Но моя команда вставки по умолчанию запускает эти пакеты операторов SQL, если в TableAdapter включено обновление. Datarow, переданный в качестве аргумента для Insert (), также будет обновлен после успешного выполнения.

INSERT INTO Table (coloumns) VALUES (values);

SELECT coloumns FROM Table WHERE (PKeyID = SCOPE_IDENTITY())
...