Чтение онлайн

на главную - закладки

Жанры

Обработка баз данных на Visual Basic®.NET

Прайс Кевин Т.

Шрифт:
НА ЗАМЕТКУ

Как и следовало ожидать, для каждого типа провайдера данных .NET используется специализированный объект: SqlDataAdapter, OledbDataAdapter или OdbcDataAdapter.

Для автоматической генерации команд нужно указать объект SelectCommand адаптера данных DataAdapter. Объект CommandBuilder использует схему таблицы, полученную с помощью метода Select объекта SelectCommand для генерации соответствующей команды вставки, обновления или удаления. Учтите, что поля, возвращаемые объектом SelectCommand, должны содержать первичный ключ или поле с уникальными значениями.

Изменение

текста команды SELECT после автоматической генерации команд обновления может привести к возникновению исключительных ситуаций при одновременном выполнении этой команды обновления. Если в исходной команде SELECT, на основании которой автоматически генерируются команды обновления данных, содержались поля, которых уже нет в генерированной команде, то при выполнении одной из команд обновления с помощью метода Update объекта DataAdapter может произойти попытка обращения к уже несуществующим полям и возникновение исключительной ситуации. Для исключения этой проблемы следует вызвать метод RefreshSchema объекта CommandBuilder после изменения свойства SelectCommand объекта DataAdapter или после изменения текста (объект CommandText) данной команды.

НА ЗАМЕТКУ

Даже после того как объект CommandBuilder автоматически сгенерировал команды вставки, обновления или удаления, соответствующие им свойства объекта DataAdapter не изменяются. Объект CommandBuilder скрывает сгенерированные команды, и доступ к ним можно получить с помощью методов GetInsertCommand, GetUpdateCommand и GetDeleteCommand.

Хотя конструктор команд CommandBuilder прост в применении, нужно учитывать его ограничения. Основное ограничение связано с тем, что нельзя проконтролировать выполняемые им действия, т.е. задать его конфигурацию. Он просто генерирует команды обновления на основе заданной команды SELECT без каких-либо параметров. Кроме того, он предназначен для выполнения команд по отношению к одной таблице базы данных. Иначе говоря, объект DataTable с результатами объединения таблиц не может использоваться объектом CommandBuilder. Более того, команды генерируются для одной таблицы без учета ее возможных связей с другими таблицами базы данных, что может привести к нарушению целостности данных при наличии между таблицами родительско-дочерних отношений.

Еще одно ограничение объекта CommandBuilder связано с тем, что он не способен генерировать команды обновления, если имя таблицы или поля содержит специальные символы, например пробел, точку или другие не буквенно-цифровые символы, даже если это имя заключено в кавычки. Однако он может работать с полностью квалифицированными именами таблиц в формате база_данных.владелец.таблица.

Чтобы извлекать и сохранять данные в базе данных с помощью объекта DataAdapter, создадим в проекте DataSetCode еще одну форму. Для этого выполните перечисленные ниже действия.

1. Создайте новую кнопку непосредственно под кнопкой DataAdapter Fill, перетаскивая ее из панели элементов управления. В окне свойств Properties укажите значение btnDataAdapterUpdate для свойства (Name) и значение DataAdapter Updates для свойства Text.

2. Создайте в проекте DataSetCode новую форму.

3. В окне свойств Properties укажите значение frmUpdates для свойства (Name) и значение DataAdapter Updates для свойства Text.

4. Увеличьте

размер формы frmUpdates.

5. Создайте в правой части формы сетку данных DataGrid, перетаскивая ее из панели элементов управления.

6. В окне Properties укажите значение grdDataGrid для свойства (Name) сетки данных.

7. Увеличьте размер сетки данных, чтобы она занимала до 80% всей площади формы. 

8. В верхнем левом углу формы создайте кнопку, перетаскивая ее из панели элементов управления.

9. В окне Properties укажите значение btnLoad для свойства (Name) и значение Load для свойства Text этой кнопки.

10. Создайте новую кнопку непосредственно под кнопкой btnLoad, перетаскивая ее из панели элементов управления.

11. В окне Properties укажите значение btnLoad для свойства (Name), значение Load для свойства Text и значение False для свойства Enabled этой кнопки.

12. В верхней части файла с кодом формы frmUpdates введите следующий код:

Imports System

Imports System.Data

Imports System.Data.SqlClient

13. Затем в код формы frmUpdates введите код из листинга 6.3.

Листинг 6.3. Применение объекта SqlCommandBuilder для автоматической генерации команд обновления

Private dsEmployeeInfo As DataSet

Private daEmployees As SqlDataAdapter

Private conn As New SqlConnection( _

 "server=localhost;uid=sa;pwd=;database=novelty")

 ' Применение объекта SqlCommandBuilder

 ' для автоматической генерации команд обновления.

Private cbEmployees As SqlCommandBuilder

Private Sub btnLoad_Click(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles btnLoad.Click

 dsEmployeeInfo = New DataSet

 LoadCommandBuilder

 ' Конфигурирование объекта-сетки DataGrid.

 Me.grdDataGrid.PreferredColumnWidth = 110

 Me.grdDataGrid.AllowSorting = True

 ' Вставка данных в объект DataSet.

 daEmployees.Fill(dsEmployeeInfo, "Employees")

 ' Присвоение объекта DataSet объекту DataGrid.

 Me.grdDataGrid.DataSource = _

dsEmployeeInfo.Tables("Employees")

 Me.btnUpdate.Enabled = True

End Sub

Private Sub btnUpdate_Click(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles btnUpdate.Click

 daEmployees.Update(dsEmployeeInfo, "Employees")

End Sub

Private Sub LoadCommandBuilder

Поделиться:
Популярные книги

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Вадбольский

Никитин Юрий Александрович
1. Вадбольский
Фантастика:
попаданцы
5.00
рейтинг книги
Вадбольский

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Таня Гроттер и магический контрабас

Емец Дмитрий Александрович
1. Таня Гроттер
Фантастика:
фэнтези
8.52
рейтинг книги
Таня Гроттер и магический контрабас

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Кодекс Крови. Книга ХI

Борзых М.
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХI

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Потусторонний. Книга 1

Погуляй Юрий Александрович
1. Господин Артемьев
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Потусторонний. Книга 1