Доступ к БД из приложений

Автор работы: Пользователь скрыл имя, 20 Ноября 2013 в 16:53, реферат

Краткое описание

Рассмотрим организацию совместной работы СУБД и приложения, передающего СУБД команды и получающего от СУБД данные. Как правило, для этой цели необходима специальная библиотека-посредник между СУБД и приложением. Одной из такого рода библиотек является Microsoft ADO.NET (ActiveX Data Objects). Это библиотека классов (входящая в состав .NET Framework), позволяющая .NET-приложению взаимодействовать с MS SQL Server, Oracle и другими СУБД через стандартные интерфейсы.

Вложенные файлы: 1 файл

Доступ к БД из приложений.docx

— 143.64 Кб (Скачать файл)

 

//выполнение команды

int cnt = (int)cmd.ExecuteNonQuery();

В этом случае инструкция передаётся SQL Server следующим образом:

exec sp_executesql N'insert into T(n,m) values (@n, @m)',N'@n int,@m int',@n=12,@m=12

 

При этом изменить смысл команды  невозможно.

Обработка ошибок

Необходимая часть работы с БД – рассмотрение  возможных ошибок и программирование реакции на них. Большинство ошибок при выполнении DQL- и DML-инструкций сводится к следующим видам:

● ошибки подключения и  аутентификации;

● недостаток привилегий;

● неверная структура инструкции;

● нарушение ограничений  целостности данных;

● конфликты параллельно выполняемых транзакций.

Естественно, в первую очередь  следует заботиться о предотвращении ошибок. Если ошибка всё же возникла, то, в зависимости от серьёзности ошибки, произойдет следующее:

● для ошибок уровня серьёзности менее 11 СУБД передаёт информационное сообщение, доступное через событие InfoMessage объекта подключения;

● для ошибок уровня от 11 до 20 генерируется ошибка, но подключение  не закрывается. ADO.NET создаёт исключение, которое должно быть обработано;

● для ошибок уровня более 20 генерируется ошибка, и подключение  закрывается.

Рассмотрим несколько  типичных ошибок и приёмы их обработки.

Ошибки подключения и аутентификации

Если параметры строки подключения неверны либо сервер БД по какой-либо причине недоступен, то при выполнении метода Open() класса SqlConnection возникнет исключение типа SqlException.

try {

    SqlConnection cn = new SqlConnection(@"Data Source = wrong name; Initial Catalog = master; Integrated Security = true; Connect Timeout = 5");

    cn.Open();

}

catch (SqlException ex) {

    Console.WriteLine("Не удалось подключиться к БД");

}

 

Если же сервер отказал  в авторизации, то также возникнет  исключение SqlException с сообщением «Login failed for user …».

В данном примере перехватываются любые исключения SqlException, и пользователю выдаётся сообщение общего характера об ошибке подключения.

Если неверен формат самой строки подключения, то исключение типа ArgumentException возникнет в момент присваивания неверной строки свойству ConnectionString объекта SqlConnection.

Нарушение ограничений  целостности данных

Сюда относятся нарушения  типов данных, проверочных ограничений, ограничений первичных и внешних ключей, а также срабатывание обеспечивающих целостность триггеров. Самая распространённая ошибка – нарушение ограничения внешнего ключа. Рассмотрим пример.

При попытке вставки строки в таблицу студент с неверным значением внешнего ключа возникает  ошибка с сообщением «The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Student_Group". The conflict occurred in database "Study", table "dbo.Groups", column 'GroupID'. The statement has been terminated».

Для понимания причины  ошибки достаточно имени ограничения, которое нарушено: FK_Student_Group. Поэтому обработку ошибки можно осуществить следующим образом:

SqlConnection cn = new SqlConnection(@"Data Source = localhost\sqlexpress; Initial Catalog = study; Integrated Security = true; ");

try {

    cn.Open();

}

catch (SqlException ex) {

    Console.WriteLine("Не удалось подключиться к БД");

}

try {

    SqlCommand cmd = new SqlCommand(@"insert into Student(FIO, GroupID) values('John', 'Wrong Group')", cn);

    cmd.ExecuteNonQuery();

    cn.Close();

}

catch (SqlException ex) {

    if (ex.Message.Contains("FK_Student_Group")) {

        //обработка ошибки внешнего ключа

        Console.WriteLine("Указан неверный код группы");

    }

    else {

        //обработка других возможных ошибок

    }

    cn.Close();

}

 

Заметим, что закрытие подключения  следует выполнить в любом  случае.

 

 


Информация о работе Доступ к БД из приложений