Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Часть II. Клиентские технологии

Поиск

 

Очевидно, что конечный пользователь не знает языка SQL, поэтому ему нужно предоставить удобный и понятный пользовательский интерфейс, с помощью которого он мог бы формировать и получать данные. В архитектуре «клиент-сервер» СУБД представляется серверной стороной, а в качестве клиентского уровня может использоваться любое приложение (консольное, оконное, web-приложение), разработанное с помощью различных технологий и языков программирования. Общая концепция обмена данными между клиентом и сервером по большей степени не зависит от технологии реализации клиентского приложения. Поэтому разберем вопросы, связанные с разработкой клиентского приложения на языке программирования C# с использованием технологии ADO.NET. Приведем типовые примеры решения различных задач, возникающих на клиентской части приложения.

Для подключения к базам данных в среде.NET Framework используется пространство имен System.Data и его подпространства имен (OleDb, Odbc и пр.). Разберем основные особенности работы элементов этого пространства имен. В основе любого из них – драйвер баз данных (коннектор) – специальное программное обеспечение, которое является посредником между клиентским приложением и базой данных (серверной или файловой). Для обращения используются стандартные технологии Ole Db или ODBC.

 

ВЫПОЛНЕНИЕ ЗАПРОСА К БАЗЕ ДАНЫХ ИЗ КЛИЕНТСКОГО

ПРИЛОЖЕНИЯ

 

Простая модель обращения к базе данных реализуется через три основных класса, которые могут быть реализованы на основе как универсальных технологий (Ole Db или ODBC), так и конкретных СУБД (например, SQL Server или MySQL):

• Класс соединения;

• Класс команды;

• Класс курсора для получения данных из результата запроса.

Класс соединения настраивает параметры базы данных, к которой следует подключиться. Открытие такого соединения позволяет формулировать команды к серверу баз данных. Команды оформляются с помощью языка SQL и оформляются в программе с помощью класса команды. Класс курсора предназначен для чтения данных результата запроса. Курсор обычно является последовательным, т.е. с помощью него мы можем получить последовательно все записи результата запроса, начиная с первой до последней, но не можем вернуться к уже просмотренным записям.

Настройка соединения осуществляется через понятие строки соединения – параметров, которые описывают драйверы СУБД, конкретные базы данных и параметры безопасности для подключения к базе.

Например, для настройки источника данных ODBC требуется воспользоваться средством администрирования операционной системы Windows.

Рис. 37. Панель администрирования ОС Windows.

 

Для общения с серверными СУБД требуется, чтобы источник данных был системным:

 

Рис. 38.Окно просмотра источников данных ODBC.

 

При создании и редактировании источника данных требуется выбрать драйвер и задать параметры подключения к базе данных:

 

Рис. 39.Окно настройки источника данных для сервера MySQL.

 

Драйверы могут устанавливаться и регистрироваться в операционной системе вместе с соответствующей СУБД, а могут быть и самостоятельным компонентами, которые следует установить отдельно. Так, например, для SQL Server драйвер SQL Native Client устанавливается в процессе установки СУБД, а для сервера MySQL драйвер (MySQL ODBC Connector) является дополнительной компонентой, которую следует установить отдельно.

Для настройки строки соединения через технологию Ole Db можно воспользоваться специальной утилитой операционной системы Windows. Для этого требуется создать файл с расширением “.udl”. При последующем открытии этого файла будут вызвано окно настройки источника данных:

 

Рис. 40. Окно сервиса OLE DB Core Services. 

 

После выбора поставщика данных на вкладке «Подключение» следует настроить параметры базы данных (имя, местоположение, параметры безопасности). Этот файл можно будет открыть с помощью текстового редактора – в нем будет записана строка соединения через выбранный провайдер Ole Db.  

Для примера рассмотрим подключение к базе данных на SQL Server. Создадим файл connect.udl (например, с помощью «Блокнота») и откроем его с помощью службы OLE DB Core Services. На вкладке «Поставщик данных» следует выбрать пункт «SQL Server Native Client номер версии» (номер версии, очевидно, зависит от установленного на компьютере SQL Server’а). Далее на вкладке «Соединение» следует настроить параметры подключения к серверу – имя сервера, параметры входа (обычно устанавливаются из системы безопасности операционной системы), имя используемой базы данных. С помощью кнопки «Проверить подключение» можно протестировать созданную строку соединения.

 

Рис. 41. Окно настройки параметров подключения к SQL Server.

 

Далее при открытии файла connect.udl с помощью «Блокнота» мы увидим сгенерированную строку подключения:

Provider=SQLNCLI11.1;Integrated Security=SSPI;

Persist Security Info=False;

User ID="";Initial Catalog=proba;Data Source=(local);

Initial File Name="";Server SPN=""

 

Далее приведен программный код, в котором осуществляется подключение к источнику данных, заданному с помощью ODBC и получение данных из базы данных с помощью формирования SQL-запроса:

// создание подключения к базе данных на основе строки соединения 

// с указанием источника данных ODBC

OdbcConnection con = new OdbcConnection("DSN=proba");

// подключение к источнику данных con.Open();

// формирование команды SQL на выборку данных

OdbcCommand com = new OdbcCommand("select * from Session", con);

// выполнение команды на сервере и сохранение результата 

// в курсоре типа OdbcDataReader

OdbcDataReader dr=com.ExecuteReader();

// переход к следующей строке посредством функции Read() // пока строки в результате есть – печатаем информацию из строк while (dr.Read())

Console.WriteLine(“”+dr[“NumGroup”]+” “+dr[“idSubject”]+

                                             ”

”+dr[“Zach_exam”]); // закрывается соединение dr.Close();

con.Close();

 

Аналогичным будет программный код и в случае использования подключения по технологии Ole DB. Отличия будут только в именах используемых классов для доступа к базе данных (OleDbConnection, OleDbCommand, OleDbDataReader) и, соответственно, в пространстве имен, содержащее эти классы.

Отметим еще момент, связанный с обеспечением доступа к полям строки курсора. Текущая строка представляется как ассоциативный массив, доступ к элементам которого можно осуществлять по номерам или по именам столбцов, что очень удобно с точки зрения последующего чтения программного кода.

 

ПАРАМЕТРЫ ЗАПРОСА

 

Нередко запрос зависит от параметров, являющиеся значениями, по которым осуществляется выборка или другие фрагменты запроса, например, условия, формируемые программным образом. В этом случае используется коллекция параметров, которая имеется у объекта класса OdbcCommand. При создании параметра в запросе указывается символ “?”, а далее добавляется применяемое значение параметра в коллекцию параметров SQL-команды. В том случае, когда базовой технологией доступа является Ole Db, параметры в запросе именуются, причем эти имена начинаются с символа “@”. 

Пусть, например, номер группы, для которой требуется распечатать план сессии, вводится с клавиатуры и становится условием выборки записей из таблицы плана сессии для студентов.

// создание подключения к базе данных на основе строки соединения 

// с указанием источника данных ODBC

OdbcConnection con = new OdbcConnection("DSN=proba");

// подключение к источнику данных con.Open();

// ввод номера группы

string group = Console.ReadLine();

// формирование команды SQL на выборку данных

OdbcCommand com = new OdbcCommand

                 ("select * from Sessions where NumGroup=?", con);       

 

// задание значение параметра запроса com.Parameters.AddWithValue(“@par”,group);

      

// выполнение команды на сервере и сохранение результата 

// в курсоре типа OdbcDataReader

OdbcDataReader dr=com.ExecuteReader();

// переход к следующей строке посредством функции Read() // пока строки в результате есть – печатаем информацию из строк while (dr.Read())

Console.WriteLine(“”+dr[“NumGroup”]+” “+dr[“idSubject”]+

                                         ” ”+dr[“Zach_exam”]);

// закрывается соединение dr.Close();

con.Close();

 

Нередко использование параметров применяется при удаленном вызове хранимых процедур и функций. Вспомним, что у нас имеются функции, которые позволяют перевести баллы в оценку (например, GetMark1). Вызов этой функции может быть таким:

// создание подключения к базе данных на основе строки соединения 

// с указанием источника данных ODBC

OdbcConnection con = new OdbcConnection("DSN=proba");

// подключение к источнику данных con.Open();

// ввод набранных баллов на экзамене string b = Console.ReadLine();

// формирование команды SQL на вызов функции и получение ее результата

OdbcCommand com = new OdbcCommand("select GetMark1(?)", con);       

// задание значение параметра запроса com.Parameters.AddWithValue(“@ball”,b);

      

// выполнение команды на сервере и сохранение результата 

//в курсоре типа OdbcDataReader

OdbcDataReader dr=com.ExecuteReader();

// переход к первой строке – результат вызова функции dr.Read();

Console.WriteLine(“Оценка - ”+dr[0]);

// закрывается соединение dr.Close();

con.Close();

 

ВЫПОЛНЕНИЕ КОМАНД DML

 

Напомним, что командами DML являются команды вставки новых записей, изменения существующих записей и удаления записей. Данные команды возвращают число – количество строк, с которыми была выполнена требуемая операция. Вызов этих команд из клиентского приложения отличается только функцией класса OdbcCommand (или OleDbCommand) – вместо ExecuteReader() вызывается функция ExecuteScalar(). 

Например, пусть создается новая учебная дисциплина:

// создание подключения к базе данных на основе строки соединения 

// с указанием источника данных ODBC

OdbcConnection con = new OdbcConnection("DSN=proba");

// подключение к источнику данных con.Open();

// ввод названия новой учебной дисциплины string title = Console.ReadLine();

// формирование команды SQL на добавление данных – в таблице ключ 

// задается с помощью поля-счетчика, так что указывать 

// его в запросе на вставку не обязательно

OdbcCommand com = new OdbcCommand                   ("insert into Subjects values (‘?’)", con);

// задание значение параметра запроса com.Parameters.AddWithValue(“@par”,title); // выполнение команды на сервере com.ExecuteScalar();

// закрывается соединение con.Close();

 



Поделиться:


Последнее изменение этой страницы: 2021-04-12; просмотров: 122; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.123.10 (0.009 с.)