C#. Update DB and Dataset manually

Metanit

Хотя в предыдущей теме объект SqlCommandBuilder позволял нам автоматически создать все нужные выражения для обновления данных в БД из DataSet, но все же этот способ имеет свои недостатки. Например, взглянем на следующий кусочек кода, который использовался в прошлой теме:

После обновления происходит очистка DataSet и перезагрузка данных, что снижает производительность приложения. Хотя в DataTable у нас уже добавлена строка с новыми данными, и в ней не хватает только id – значения, которое генерируется самой базой данных при добавлении. Без id нам трудно будет управлять данными, мы не сможем их автоматически через тот же SqlCommandBuilder обновлять или удалять. Поэтому в идеале хотелось бы избежать и перезагрузки данных и в то же время получить id новой записи при выполнении метода adapter.Update. И более гибкий способ состоит в том, что мы сами вручную определяем все те выражения, которые будут выполняться.

Итак, добавим в базу данных следующую хранимую процедуру:

В качестве входных параметров она принимает имя и возраст пользователя и возвращает его id.

Теперь изменим код из прошлой темы:

Здесь также используется SqlCommandBuilder, но теперь из-за переустановки свойства adapter.InsertCommand выполнение добавления нового объекта будет переопределено.

При определении выходного параметра мы указываем, что он будет называться “@Id” и будет возвращать значение для столбца Id в DataTable:

В итоге при выполнении метода adapter.Update() id автоматически попадет в DataTable. При этом операции по обновлению и удалению мы можем использовать те же, что предоставляет SqlCommandBuilder.

И после обновления базы данных с помощью метода AcceptChanges() объекта DataSet производится принятие всех изменений в DataSet ко всем измененным строкам.

This entry was posted in C#. Bookmark the permalink.