Как создать операторы обновления для объектов TableAdapter в Visual Studio?

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

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

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

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


person Mark Wilkins    schedule 29.04.2010    source источник


Ответы (1)


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

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

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

РЕДАКТИРОВАТЬ

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

INSERT INTO Table (coloumns) VALUES (values);

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

INSERT INTO Table (coloumns) VALUES (values);

SELECT coloumns FROM Table WHERE (PKeyID = SCOPE_IDENTITY())
person this. __curious_geek    schedule 30.04.2010
comment
@this .__ curious_geek: Спасибо за ответ. Однако я точно понимаю, что делает опция обновления и как она работает. Проблема в том, что я пишу провайдер ADO.NET. И в этом есть что-то, что, по-видимому, не нравится Visual Studio, поэтому он не будет помещать туда операторы обновления. - person Mark Wilkins; 30.04.2010
comment
Да, я понимаю, что он должен делать. Я не спрашиваю, что эта опция должна делать. Мне нужны идеи о том, что я сделал неправильно в моем собственном поставщике данных .NET, из-за чего он не работает. - person Mark Wilkins; 30.04.2010