Украина, Киев |
Передача изменений в базу данных при помощи хранимых процедур. Объект CommandBuilder
Обработка исключений
В процессе передачи изменений в базу данных могут возникать многочисленные исключения. Объекты DataSet, DataTable и DataRow имеют свойство HasErrors, позволяющее обрабатывать некоторые из них. Скопируйте папку приложения GetChangesMethod и назовите ее "Exceptions". Изменим обработчик события Closing формы следующим образом:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { try { sqlDataAdapter1.Update(dataSet11); } catch(Exception ex) { if(dataSet11.HasErrors) { foreach( DataTable myTable in dataSet11.Tables) { if(myTable.HasErrors) { foreach(DataRow myRow in myTable.Rows) { if(myRow.HasErrors) { MessageBox.Show("Ошибка в записи #: " + myRow["Кодтуриста"], myRow.RowError); foreach(DataColumn myColumn in myRow.GetColumnsInError()) { MessageBox.Show(myColumn.ColumnName, " - в этом столбце ошибка"); } myRow.ClearErrors(); myRow.RejectChanges(); } } } } } } }
Здесь мы пробегаемся по каждому объекту6Разумеется, для отображения одной таблицы "Туристы" у нас будет всего один объект DataTable., входящему в набор DataTable, DataRow или DataColumn.
Метод ClearErrors удаляет все ошибки из объекта myRow, а метод RejectChanges производит откат всех изменений. Запускаем приложение. Переходим в SQL Server Enterprise Manager, в режиме дизайна таблицы "Туристы" изменим название поля "Фамилия". При закрытии формы и попытке внести изменения появляется диагностическое сообщение (рис. 13.22, А):
Закроем приложение, восстановим название поля - правильное название нам также нужно для получения данных. Запустим его снова, изменим название таблицы. В этом случае появляется другое сообщение (рис. 13.22, Б).
В программном обеспечении к курсу вы найдете приложение Exceptions (Code\Glava6\Exceptions).