* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Модификация и обновление данных
8 февраля 2009

Содержимым объекта DataSet можно манипулировать, в частности редактировать
его на клиентской машине. Разрешается модифицировать значения существующих
объектов DataRow, а также удалять и добавлять к DataSet новые объекты DataRow.
Однако модификации не будут реплицированы в БД, пока вы не обновите се с по-
мощью объекта DataAdapter.
Каждый экземпляр DataSet поддерживает две версии этого объекта: текущую,
расположенную на клиентском компьютере и содержащую все модификации, и
исходную, не менявшуюся со времени заполнения DataSet. При вызове метода
Update объекта DataAdapter на основе исходных значений генерируются команды
UPDATE, INSERT и DELETE, необходимые для обновления БД.
Модификация данных
Есть два способа модификации объекта DataSet: через пользовательский интерфейс
• при помощи элементов управления, связанных с данными, и программными
средствами. Изменения, внесенные через связанные сданными элементы управле-
ния, автоматически вносятся в соответствующую строку.
Примечание Связывание данных подробнее обсуждается на следующем занятии.
Также поддерживается программное добавление данных к объекту Data Row пу-
тем установки свойства Item объекта DataRow, представляющего значения полей
строки. Вот как это делается:
Visual Basic .NET
Item - это свойство по умолчанию объекта Dataflow, поэтому
ссылаться на него явно не обязательно, Получить доступ к полю
строки можно, ссылаясь на него по индексу, либо по имени,
myOataRow(2) = "Splunge"
myDataRowC'Customers") = "Winthrop"
Visual C#
// Item - это свойство по умолчанию объекта DataRow. поэтому
// ссылаться на него явно не обязательно. Получить доступ к полю
// строки можно, ссылаясь на него по индексу, либо по имени.
myDataRow[2] = "Splunge";
myDataRow["Customers"] = "Winthrop";
Каждый объект DataRow поддерживает две версии состояния: исходную, содер-
жащую первоначальные значения DataRow, и модифицированную. В любой момент
можно отменить (откатить) любые изменения, внесенные в объект DataRow, вызвав
метод RejectChanges:
Visual Basic .NET
myDataRow.RejectChanges()
Visual C#
myDataRow.RejectChanges():
Чтобы внести некоторые изменения в объект DataRow, вызовите метод Accept-
Changes. В результате модифицированная версия объекта DataRow записывается
поверх исходной.
Visual Basic .NET
myDataRow.AcceptChanges()
Visual C#
myDataRow.AcceptChanges();
Внимание! Если планируется реплицировать модификации в источник данных с
помощью объекта DataAdapter, вызывать метод AcceptChanges до вызова метода Data-
Adapter. Update нельзя, иначе объекту DataAdapter не удастся получить доступ к ис-
ходной версии данных и сгенерировать корректную команду UPDATE.
Определить состояние объекта DataRow можно посредством свойства ROM State.
Оно принимает одно из значений, описанных в таблице 6-3.
Объекты DataTable н DafaSetтакже поддерживают методы RejectChanges и Accept-
Changes, позволяющие соответственно отвергнуть или принять все изменения, вне-
сенные в DataTable или DataSet.
Таблица 6-3. Значения свойства SowState
Значение Описание
Unchanged Строка осталась в исходном виде либо не была модифицирована после
вызова AcceptChanges
Modified Строка модифицирована после последнего вызова AcceptChanges
Added Строка создана и добавлена в DataRowCollection, но метод AcceptChanges
еше не вызван
Deleted Строка удалена с помошью метода Data Row. Delete
Detached Строка создана, но не добавлена ни в один из наборов
Data Row Collection
Обновление базы данных
Закончив манипуляции над клиентской копией данных, можно обновить БД, вы-
звав метод Update у каждого объекта DataAdapter.
Visual Basic .NET
myDataAdapter.UpdateO
rnyOtherDataAdapter. Update()
Visual C#
myDataAdapter,Update();
myOtherDataAdapter.Update{);
В результате изменения, внесенные в клиентскую копию данных, копируются в
БД. При этом можно указать объект DataSet, DataTable или массив объектов Data-
Rows, подлежащий обновлению:
Visual Basic .NET
myDataAdapter.Update(myDataSet)
myDataAdapter.Update(myDataTable)
myDataAdapter.Update(myDataRows)
Visual C#
myDataAdapter.Update(myDataSet);
myDataAdapter.Update(myDataTable);
myDataAdapter.Update(myDataRows);
Транзакции
В некоторых случаях требуется выполнить серию обновлений так, чтобы все они
завершились успехом либо неудачей. Хороший пример приложения, где это необ-
ходимо, — программа для банковского учета. Давайте рассмотрим метод, который
снимает определенную сумму с одного счета (первая таблица) и зачисляет ее на
другой счет (вторая таблица). Если первая операция пройдет успешно, а вторая
окончится неудачей, результат окажется печальным. Решать подобные проблемы
позволяют транзакции. Транзакция (transaction) — это набор логически связанных
действий, выполняемых как единая операция. Для успеха транзакции все составля-
ющие ее действия должны завершиться успешно, в противном случае выполняется
откат всех операций транзакции, выполненных к этому моменту.
Инициировать транзакцию можно, вызвав метод Begin Transaction любого объек-
та Connection, представляющего открытое соединение. Этот метод возвращает ссыл-
ку на транзакцию, которую нужно записать в свойство Transaction объектов всех
команд, участвующих в данной транзакции. Далее необходимо исполнить команды
транзакции. Если все они завершатся удовлетворительно, вызывается метод Transaction.
Commit, что подтверждает изменения БД, в противном случае вызывается
метод Transaction.Rollback, который отменяет коррективы. Следующий пример де-
монстрирует исполнение транзакции с помощью объекта OleDbConnection с именем
myConnection и двух объектов OleDbCommand с именами Updatelw Vpdate2.
Примечание Для использования транзакций источник данных должен поддержи-
вать транзакции.
Visual Basic .NET
Транзакции необходимо заключить в блок Try..Catch..Finally,
чтобы иметь возможность перехвата любых исключений.
Dim myTransaction As System.Data.OleDb.OleDbTransaction
Try
myConnection.Open()
' Создать новый объект транзакции и записать его в переменную myTransaction.
myTransaction = myConnection.BeginTransaction
Добавить команды Update! и Update? к транзакции.
Update"!.Transaction - myTransaction
Update2.Transaction = myTransaction
' Исполнить команды Update"! и Update2.
Update"!. ExecuteNonQuery()
Update2.ExecuteNonQuery()
' Если исключений не возникло, считать транзакцию успешной,
myTransaction.Commit()
Catch ex As Exception
' в противном случае отменить транзакцию.
myTransaction. RollbackO
Finally
В любом случае соединение необходимо закрыть.
myConnection.Close()
End Try
Visual C#
// Транзакции необходимо заключить в блок Try..Catch..Finally,
// чтобы иметь возможность перехвата любых исключений.
System. Data. QleDb.OleDbTransaction nsyTransaction = null;
try
{
myConnect ion. Open ( );
// Создать новый объект транзакции и записать его а переменную rnyTransaction.
[TiyTransaction = myConnection. BeginTransaction{);
// Добавить команды Updatel и Update2 к транзакции.
Updatel .Transaction ~ rnyTransaction;
Update2. Transaction - myTransaction;
// Исполнить команды Updatel и Update2.
Updatel. ExecuteNonQueryO;
Update2. ExecuteNonQueryO;
// Если исключений не возникло, считать транзакцию успешной,
myTransaction. Commit () ;
!
catch (Exception ex)
{
// а противном случае отменить транзакцию.
rnyTransaction . Rollback( ) ;
}
f i n a l l y
!
// В любом случае соединение необходимо закрыть.
myConnection . CLose( ) :
> Исполнение нескольких команд как транзакции
1. Откройте соединение с БД.
2. Получите ссылку на транзакцию, вызвав метол Connection. BeginTransaction.
3. Поместите полученную ссылку в свойство Transaction всех команд-участников
транзакции.
4. Выполните команды транзакции.
5. Вызовите метод Transaction. Commit, чтобы завершить транзакцию.
Транзакции доступны и при взаимодействии с БД через объект DataAdapter, но в
этом случае применять их сложнее. Прежде всего необходимо создать транзакцию,
вызвав метод BeginTransaction объекта, который представляет открытое соединение.
Далее созданную транзакцию помещают в свойства Transaction объектов, представ-
ляющих команды Insert Command, UpdateCommand и DeleteCommand всех объектов
DataAdapter, которые будут задействованы при обновлении БД. После этого можно
вызвать метод Update каждого объекта DataAdapter и завершить транзакцию, вызвав
метод Commit или Rollback объекта этой транзакции.

Теги: .NET

Статьи по теме:

Замыкания (closure)
Создание и настройка объекта DataAdapter
Работа с элементами управления
Реализация обработчиков событий
Создание дополнительных типов объектов Doughnut
Создание обработчика для группы событий
Преобразование типов
Генерация исключений
Рисование сложных фигур
Применение отладочных инструментов
Использование шаблонов кода
Модификаторы доступа к типам
Реализация полиморфизма через интерфейсы
Операторы Imports и using
Создание компонента DoughnutMachine
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Модификация и обновление данных. Регион сайта: Москва и Санкт-Петербург