RowUpdated
Событие RowUpdated генерируется после обновления в источнике данных строки из DataSet.
Событие RowUpdated полезно для реагирования на ошибки и исключения, возникающие в ходе обновления данных. Сведения об ошибке можно добавить в объект DataSet
, а также в логику повторов и т. д.
Синтаксис
public class RowUpdatedEventArgs : EventArgs;
Свойства аргумента RowUpdatedEventArgs (значения EventArgs) аналогичны свойствам аргумента RowUpdatingEventArgs (см. подпункт «RowUpdating»).
Дополнительно определяются следующие свойства:
-
RecordsAffected
– содержит количество строк, которые были изменены, вставлены или удалены при выполнении SQL-запроса; -
RowCount
– содержит количество строк, обработанных в пакете обновленных записей.
Пример
// C# using System; using System.Data; using System.Data.Common; using System.Data.LinterClient; class RowUpdatedSample { static void Main() { // Соединение с БД LinterDbConnection con = new LinterDbConnection( "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8"); // Создание таблицы БД LinterDbCommand cmd = new LinterDbCommand( "create or replace table users ( " + "id integer primary key, name varchar(70));" + "insert into users (id, name) values (0, 'Пользователь A');" + "insert into users (id, name) values (1, 'Пользователь B');" + "insert into users (id, name) values (2, 'Пользователь C');", con); con.Open(); cmd.ExecuteNonQuery(); con.Close(); // Создание объекта LinterDbDataAdapter LinterDbDataAdapter adapter = new LinterDbDataAdapter( "select id, name from users", con); adapter.RowUpdating += new EventHandler< RowUpdatingEventArgs >(OnRowUpdating); adapter.RowUpdated += new EventHandler< RowUpdatedEventArgs >(OnRowUpdated); // Создание объекта LinterDbCommandBuilder LinterDbCommandBuilder builder = new LinterDbCommandBuilder(adapter); // Заполнение объекта DataTable данными из таблицы БД DataTable users = new DataTable(); adapter.Fill(users); // Изменяем записи в таблице DataTable users.Rows[0]["name"] = "Новый пользователь A"; users.Rows[1].Delete(); users.Rows[2]["name"] = "Новый пользователь C"; // Имитируем несогласованное изменение первой записи в БД cmd.CommandText = "update users set name = 'Пользователь X' where id = 0"; con.Open(); cmd.ExecuteNonQuery(); con.Close(); // Теперь обновление БД должно завершиться ошибкой adapter.Update(users); // Отображение таблицы после обновления Console.WriteLine("Строки таблицы после обновления:"); foreach (DataRow row in users.Rows) { Console.Write("{0}: '{1}' ", row[0], row[1]); if (row.HasErrors) { Console.WriteLine("(при обновлении строки произошла ошибка)"); } else { Console.WriteLine("(обновление строки выполнено успешно)"); } } } static void OnRowUpdating(object sender, RowUpdatingEventArgs args) { if (args.StatementType == StatementType.Delete) { Console.WriteLine("{0} Удаление записи '{1}'", DateTime.Now, args.Row["name", DataRowVersion.Original]); } } static void OnRowUpdated(object sender, RowUpdatedEventArgs args) { if (args.Status == UpdateStatus.ErrorsOccurred) { args.Row.RowError = args.Errors.Message; args.Status = UpdateStatus.SkipCurrentRow; } } } Результат выполнения примера: 07.12.2012 20:13:47 Удаление записи 'Пользователь B' Строки таблицы после обновления: 0: 'Новый пользователь A' (при обновлении строки произошла ошибка) 2: 'Новый пользователь C' (обновление строки выполнено успешно)