Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 191

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 185 186 187 188 189 190 < 191 > 192 193 194 195 196 197 .. 260 >> Следующая

Некоторым разработчикам требуется передать изменения в транзакции и под-п»срдн их. если только все они переданы успешно. В такой ситуации \ ч-к, ,ж н-дуется не изменять значение свойства по умолчанию, False,
и откатить транзакцию, если метод I сгенерирует исключение.
Информирование пользователя об ошибках
Важно уведомить пользователя о неудачной попытке обновления. Некоторые компоненты упрощают записей, передача изменений которых завершилась неудачно. Так, если вы отредактировали группу записей в Windows-элементе управления лай и передача этих изменений зансришлаеа-. ошибкой, в заголовке неудачно обновленных записей появится предупреждающий значок. Если подвести к нему мышку, отобразится всплывающая с текстом сообщения об ошибке.
Следующий код позволяет вывести информацию о неудачно обновленных записях в случаях, когда обычный, пе связанный с данными элемент управления
Visual Basic .NET
Try
MyDataAdapter.ContinueUpdateOnFrror = True MyDataAdapter.Update(MyDataTable) If HyOataTable.HesErrors Dim strMessage As String
strMessage = "The following row(s) were not updated " & _ "successfully:"
Dim row As DataRow For Each row In MyDataTable.Rows If row.HasErrors Then
strMessage &= vbCrLf & rowCTD") &"-"&_ row.RowError
End If INext row
MessageBox,Show(strMessage)
Else
MessageBox.Show("All updates succeeded") End If Catch ex As Exception
MessageBox.Show("The following exception occurred:" & vbCrLf & _ ex.Message)
End Try
440
Visual C# .NET
try {
HyDataAdapter. ContinuellpdateOnErt 0' = true;
MyDataAdapter.Update(MyDataTable);
if
.
string strMessage;
strHessage = "The following row(s) were not updated
"successfully:"; foreach (OataRow row in MyBataTable.Rows) if (row.HasErrors)
strMessage += "\n\r" + (string) row["ID"J + row. RowError; MessageBox.Show( strHessage);
)
else
HessageBox.Show("All updates succeeded");
catch (Exception ex)
I
>
HessageBox.Shoa("The following exception occurred: \n\r"
ex.Message);
Некоторые требовательные хотят знать не только о возникно-
вении ошибки, но ио причине ее возникновения, а также о том, как успешно передать обновление БД. Для начала посмотрим, как определить, почему передача обновления завершилась неудачно,
Что. если бы для каждой неудачной попытки обновления удавалось извлечь информанта, показанную на рис. II-' \ '
•.CustomefiQ- BaanceOu»: :,
Вы пытались передать следующие данные ABCDE ABCDE Inc. $200.00
Оригинальные данные записи: ABODE ABCDE ?•:!, $100.00
Текущие данные записи в БД: ABCDE ABCDE Inc. $125.00
Рис. 11-14. Вывод информации о неудачных попытках обновления
Вы уже умеете обращаться с помощью объекта DataRow к текущему и оригинальному содержимому записи.
Visual Basic .NET
Dim ¦ As DataTable = CreateRllAndMod ,f ylliloef) Dim row As DataRow = tbl.Rows(O)
Console.WriteLine("Current Balance Due: " & row("BalanceDue")) Console.WriteLine("Original Balance Due: " &_
rowC'BalanceDue", DataRowVersion.Original))
+
+
ГЛАВА 11 Сложные случаи обновления данных
441
Visual C# NET
DataTable tbl = CreateFillAndHodifylableO: DataRow row = tbl.Rows[0];
Console.WriteLlne("Current Balance Due: " + row["BalanceDue"]); Console.WriteLine("Original Balance Due: " +
row["BalanceDue", DataRowVersion.Original]);
Но как выбрать текущее содержимое нужных записей из БД?
Выборка текущего содержимого конфликтующих записей
Для выборки текущего содержимого конфликтующих записей надо воспользоваться событием RowUpdatedoQbeKTa DatciAdcipter. Следующий фрагмент кода определяет, столкнулся ли объект DataAdapter с ошибками при передаче обновления, Если ошибка — исключение параллелизма, код с помощью параметризованного запроса выберет текущее содержимое соответствующей записи БД.
Чтобы сделать фрагмент кратким и удобочитаемым, я опустил определения объектов DataAdapter и DataSet. Объект ConjliaAdapter- это DataAdapter, содержащий параметризованный запрос для получения содержимого записи БД. Параметр данного запроса — поле первичного ключа БД. В объекте DataTable таким полем является ID. Код использует в качестве параметра зи-лчш-щс поля ID записи, изменений которой завершилась неудачно, подставляет его в запрос, выполняет последний и помещает его результаты в отдельный объект DataSet.
Есть также вероятность того, что обновляемая запись уже не существует в БД. Код определяет, вернул ли запрос запись, и соответствующим образом задает значение свойства RowUpdate объекта DataRow.
Visual Basic NET
Private Sub HandleRowUpdated(ByVal sender As Object, _
ByVal e As OleDbHowUpdatedEventArgs) If e.Status = UpdateStatus.ErrorsOccurred AndAlso _ TypeOf(e.Errors) Is DBConcurrencyException Then ConflictMapter. SelectCommand. Parameters(O). Value = s. Row("ID") Dim i.ntRowsReturned As Integer
IntRowsReturned = ConflictAdapter. Fill(ConfHctDataSet) If intRowsReturned = 1 Then
e.Row.RowError = "The row has been modified by another user."
Else
e.Row.RowError = "The row no longer exists in the database."' End If
e. Status = (JpdateStatus .Continue
Предыдущая << 1 .. 185 186 187 188 189 190 < 191 > 192 193 194 195 196 197 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100