Передача изменений в базу данных при помощи хранимых процедур. Объект 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).
