Обработка баз данных на Visual Basic®.NET
Шрифт:
Как и следовало ожидать, для каждого типа провайдера данных .NET используется специализированный объект: SqlDataAdapter, OledbDataAdapter или OdbcDataAdapter.
Для автоматической генерации команд нужно указать объект SelectCommand адаптера данных DataAdapter. Объект CommandBuilder использует схему таблицы, полученную с помощью метода Select объекта SelectCommand для генерации соответствующей команды вставки, обновления или удаления. Учтите, что поля, возвращаемые объектом SelectCommand, должны содержать первичный ключ или поле с уникальными значениями.
Изменение
Даже после того как объект 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. Увеличьте
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 введите следующий код:
13. Затем в код формы frmUpdates введите код из листинга 6.3.