на начало
На главную страницу
Форум   

Статья :: Обновление источника данных


Обновление источника данных

Каким образом метод SqlDataAdapter: :Update (Обновить) передает источнику данных информацию о произведенных изменениях? Изменения, внесенные в объект Da-taSet (Набор данных), передаются базе данных с помощью свойств InsertCommand, UpdateCommand (Команда обновления) и DeleteCommand класса SqlDataAdapter. Каждому из этих свойств присваивается экземпляр SqlCommand, который может быть параметризован для того, чтобы поставить в соответствие переменные программы частям SQL-запроса. Продемонстрируем это на примере кода, взятого из реализации конструктора класса HotelBroker (Посредник, бронирующий места в гостинице).
Экземпляр SqlCommand создается для представления параметризованного SQL-запроса, который используется при вызове метода SqlDataAdapter:: Update (Обновить) для добавления в базу данных новой строки. В момент вызова метода вместо параметров будут подставлены фактические значения.

SqlCommand *cmd = new SqlCommand(
"insert Hotels(City, HotelName, NumberRooms, RoomRate)
// "вставить Гостиницы (Город, HotelName,
// NumberRooms, RoomRate)
values(@City, @Name, SNumRooms, @RoomRate)", // значения
conn);

Параметры должны быть связаны с соответствующими столбцами в DataRow. Во фрагменте кода метода AddHotel, рассмотренного ранее, столбцы различались по именам: HotelName, City (Город), NumberRooms, RoomRate. В конструкторе SqlParame-ter им соответствуют параметры @Name, @City, @NumRooms, @RoomRate. Последний аргумент инициализирует свойство Source (Источник) объекта SqlParameter. Свойство Source (Источник) определяет столбец объекта DataSet (Набор данных), которому соответствует параметр. Метод Add (Добавить) помещает параметр в коллекцию объектов Parameter (Параметр), связанную с экземпляром SqlCommand.

SqlParameter *param = new SqlParameter(
"@City", SqlDbType::Char, 20, "City");
cmd->Parameters->Add(param); // Параметры-> Добавить
cmd->Parameters->Add(new SqlParameter( // Параметры-> Добавить
"@Name", SqlDbType::Char, 20, "HotelName"));
cmd->Parameters->Add (new SqlParameter( // Параметры-> Добавить
"@NumRooms", SqlDbType::Int, 4, "NumberRooms"));
cmd->Parameters->Add(new SqlParameter( // Параметры-> Добавить
"@RoomRate", SqlDbType::Money, 8, "RoomRate"));

И, наконец, свойству InsertCommand класса SqlDataAdapter присваивается указатель на экземпляр класса SqlCommand. Отныне именно эта команда будет использоваться при вставке строки в базу данных:

hotelsAdapter->InsertCommand = cmd;

Аналогичный исходный код есть в конструкторе класса HotelBroker (Посредник, бронирующий места в гостинице). Различие лишь в том, что там устанавливаются значения свойств UpdateCommand (Команда обновления) и DeleteCommand для определения команд обновления и удаления строк.

hotelsAdapter->UpdateCommand = new SqlCommand(
"update Hotels set NumberRooms = @NumRooms, RoomRate = @RoomRate where City = @City and HotelName = @Name",
// где Город = @City и HotelName = @Name ", conn); hotelsAdapter->UpdateCommand->Parameters->Add(
// Параметры-> Добавить new SqlParameter(
"@City", SqlDbType::Char,20, "City")); hotelsAdapter->UpdateCommand->Parameters->Add(
// Параметры-> Добавить new SqlParameter(
"@Name", SqlDbType:-.Char, 20, "HotelName")); hotelsAdapter->UpdateCommand->Parameters->Add(
// Параметры-> Добавить new SqlParameter(
"@NumRooms", SqlDbType::Int, 4, "NumberRooms")); hotelsAdapter->UpdateCommand->Parameters->Add(
// Параметры-> Добавить new SqlParameter(
"@RoomRate",SqlDbType::Money, 8, "RoomRate"));
hotelsAdapter->DeleteCoiranand = new SqlCommand(
"delete from Hotels where City = @City and HotelName = // "удалить из Гостиниц где Город = @City и HotelName = @Name", conn);
hotelsAdapter->DeleteCommand->Parameters->Add(
// Параметры-> Добавить new SqlParameter(
"SCity", SqlDbType::Char, 20, "City"));
hotelsAdapter->DeleteCommand->Parameters->Add(
// Параметры-> Добавить new SqlParameter(
"@Name", SqlDbType::Char, 20, "HotelName"));

Все изменения, внесенные в объект DataSet (Набор данных), будут переданы базе данных при выполнении метода SqlDataAdapter: : Update (Обновить). Как принять или отменить внесенные изменения до вызова этого метода, будет рассмотрено в следующем разделе.


Обновление источника данных

страницы в данном разделе 
Глава 9. Программирование в ADO.NET Программирование в ADO.NET
Источники данных Проводник Visual Studio.NET по серверу: Server Explorer
Установление соединения Устройства считывания данных
Работа с базой данных в соединенном режиме Выполнение операторов SQL
DataReader Множественное результирующее множество
Коллекция параметров Классы SqlDataAdapter и DataSet (Набор данных)
Отсоединенный режим Коллекции объектов DataSet (Набор данных)
Основные сведения о наборах данных Обновление источника данных
Автоматически генерируемые свойства команд Транзакции и обновление базы данных
Объект DataSet (Набор данных) и сравнение пессимистического блокирования с оптимистическим Использование наборов данных
Множественные таблицы в объекте DataSet (Набор данных) Создание таблицы без обращения к источнику данных
Ограничения и связи Получение информации о схеме размещения данных в объекте DataTabie (Таблица данных)
Изменение объекта DataRow Пример приложения Acme Travel Agency (Туристическое агентство Acme)
Доступ к данным XML Схема и данные XML
XmlDataDocument DataSet (Набор данных) и XML
База данных AirlineBrokers DataSet (Набор данных) и XML
Создание документа XML из объекта DataSet (Набор данных) Резюме


Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C



 
© faq.pp.ru, справочник программиста