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

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

Жанры

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

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

Шрифт:

Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_FirstName", System.Data.SqlDbType.VarChar, 50, System.Data.ParameterDirection.Input, False, Byte), CType(0, Byte), "FirstName", System.Data.DataRowVersion.Original, Nothing))

Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_LastName", System.Data.SqlDbType.VarChar, 70, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "LastName", System.Data.DataRowVersion.Original, Nothing))

Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter(System.Data.SqlDbType.Money, 8, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Salary", System.Data.DataRowVersion.Original, Nothing))

Me.SqlUpdateCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@ID", System.Data.SqlDbType.Int, 4, "ID"))

Для

данного объекта-команды заданы десять параметров. Первые четыре параметра являются текущими (возможно, измененными) значениями полей, которые следует обновить в базе данных. Как сообщается в главе 5, "ADO.NET: объект DataSet", каждая запись может иметь одну из четырех версий значения в каждой записи. По умолчанию используется текущее значение из считываемого поля.

Следующие пять параметров являются исходными значениями полей, которые упоминаются в предложении WHERE. Учтите, что для извлечения исходной версии значения поля (а не предлагаемой по умолчанию текущей версии) нужно явно указать исходную версию, как показано ниже.

System.Data.DataRowVersion.Original

НА ЗАМЕТКУ

Необязательно использовать исходные версии значения для всех полей в предложении WHERE. Можно настроить нужным образом любые команды обновления, чтобы уведомить об обновлении только одного или двух полей записи. В таком случае достаточно обновить только отдельные поля, а не все поля сразу. 

Последний параметр — текущее значение поля ID — применяется в качестве параметра команды SELECT, используемой для возвращения обновленных значений записи.

После каждой операции вставки, обновления или удаления объект DataAdapter проверяет количество строк, охваченных операцией. Если количество строк равно нулю, то генерируется исключительная ситуация DBConcurrencyException, поскольку обычно предполагается, что это результат конфликта при параллельном доступе к данным. Для ее перехвата и обработки следует включить блок Try-Catch в подпрограмму btnUpdate_Click, которая показана в листинге 7.3.

Листинг 7.3. Блок Try-Catch для обработки исключительной ситуации DBConcurrencyException

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

 ByVal e As System.EventArgs) Handles btnUpdate.Click

 Try

daEmployees.Update(dsEmployeeInfo, "Employees")

 Catch ec As DBConcurrencyException

' Выполнить какие-то действия.

 Catch es As DBConcurrencyException

MessageBox.Show(es.Message)

 End Try

End Sub

Отображения

таблиц и полей

Объект DataAdapter содержит коллекцию объектов DataTableMapping. Они предназначены для отображения имен таблиц и полей в источнике данных на их имена в объекте DataSet. Конечно, сразу после конфигурирования этот способ работает в обоих направлениях, т.е. при чтении данных из источника в объект DataSet и при записи данных в источник из объекта DataSet.

В данном примере в методе Fill объекта DataAdapter указывается объект DataSet и имя таблицы в этом наборе данных.

daEmployees.Fill(dsEmployeelnfo, "Employees")

Однако на самом деле второй аргумент метода Fill содержит имя объекта — отображения имени таблицы. Объект DataAdapter ищет определенное отображение с таким же именем и, если находит, использует полученную информацию для выполнения метода Fill. А если отображение не найдено, то создается таблица с именем переданного параметра и в нее вставляются данные.

Это значит, что можно, например, добавить отображение MappingName и отобразить его на таблицу empDataSetTable с помощью кода

daEmployees.TableMappings.Add("MappingName", "empDataSetTable")

А затем можно вызвать метод Fill следующим образом:

daEmployees.Fill(dsEmployeeInfo, "MappingName")

При этом считанные данные вставляются в таблицу empDataSetTable объекта dsEmployeeInfo.

После определения отображения таблицы можно приступать к созданию отображений полей. Эта операция имеет особенно большое значение при использовании в коде приложения имен полей, которые отличаются от имен, использованных в источнике данных. При работе с отображением таблицы для вставки данных в объект DataSet объект DataAdapter ищет все имеющиеся отображения полей для заданного отображения таблицы и использует их для отображения имен полей. При этом в объекте DataSet для всех полей, у которых нет отображения, будут использованы имена полей из источника данных.

Например, тестовая баз данных pubs, которая входит в состав SQL Server, была создана много лет назад, когда существовали очень строгие ограничения для имен полей, поэтому сейчас они имеют вид малопонятных аббревиатур. Отображения полей позволяют загружать данные из базы данных pubs в объект – набор данных с более понятными именами полей. Благодаря отображению удается удовлетворить все самые строгие требования и соглашения об именах, которые могут предъявляться со стороны администратора базы данных и архитектора приложения.

Продолжим работу с примером отображения таблицы и попробуем отобразить имена полей из источника данных, которые соответственно соглашению об именах, заданному архитектором приложения, начинаются с трёхсимвольного префикса. В таком случае код отображения будет выглядеть так, как в листинге 7.4.

Листинг 7.4. Отображение таблицы и полей

daEmployees.TableMappings.Add("MappingName", "empDataSetTable")

With daEmployees.TableMappings("MappingName").ColumnMappings

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

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

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

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Измена. Испорченная свадьба

Данич Дина
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Измена. Испорченная свадьба

Блуждающие огни

Панченко Андрей Алексеевич
1. Блуждающие огни
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Блуждающие огни

Пышка и Герцог

Ордина Ирина
Фантастика:
юмористическое фэнтези
историческое фэнтези
фэнтези
5.00
рейтинг книги
Пышка и Герцог

Затерянные земли или Великий Поход

Михайлов Дем Алексеевич
8. Господство клана Неспящих
Фантастика:
фэнтези
рпг
7.89
рейтинг книги
Затерянные земли или Великий Поход

Адвокат Империи 2

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

Газлайтер. Том 6

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

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Невеста снежного демона

Ардова Алиса
Зимний бал в академии
Фантастика:
фэнтези
6.80
рейтинг книги
Невеста снежного демона

Законы Рода. Том 3

Flow Ascold
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

Пипец Котенку! 2

Майерс Александр
2. РОС: Пипец Котенку!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пипец Котенку! 2