Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР7.doc
Скачиваний:
15
Добавлен:
05.05.2019
Размер:
851.46 Кб
Скачать
    1. Технология ado.Net Общие сведения

Одной из альтернативных технологий доступа к данным является технология OLE DB. Данная технология имеет в своем арсенале как прямой доступ к источникам данных, так и доступ к реляционным данным посредством технологии ODBC.

Технология OLE DB основана на использовании интерфейсов. При разработке приложений требуется использование языков, поддерживающих технологию COM (Component Object Model, модель компонентных объектов), рассматривающих объект как набор уникальных интерфейсов. С другой стороны, и сама технология OLE DB является довольно сложной. Требуется некоторый посредник между прикладной программой и интерфейсами OLE DB. Таким посредником стала технология ADO (ActiveX Data Objects, объекты данных ActiveX).

На рис. 5.8 представлена схема доступа к данным из прикладной программы посредством библиотек ADO. Если использовать терминологию OLE DB, то ADO является потребителем (consumer) услуг OLE DB.

Технология OLE DB предоставляет более широкие возможности, чем технология ODBC, поскольку рассчитана на самые разные структуры данных, а не только на реляционные базы данных.

Приложение-потребитель услуг ADO

ADO

Интерфейс OLE DB

Провайдер OLE DB

Данные

Рис. 5.8. ADO и OLE DB

Технология ADO.NET является не просто улучшением технологии ADO. Главным отличием ADO.NET от ADO является то, что в ADO.NET на стороне клиента можно получить копию базы данных с сервера, какое-то время работать с ней, даже не имея соединения, а затем передать все изменения обратно на сервер. Кроме этого, в ADO.NET все данные хранятся и передаются в формате XML. Последнее (т. е. передача) особенно важно, т. к. для передачи данных можно использовать протокол HTTP.

Основные классы для построения клиента SQL Server сосредоточены в пространствах имен System.Data И System.Data.SqlClient. Первое пространство имен, в частности, сосредоточило в себе все классы для управления реляционными объектами на стороне клиента, второе пространство содержит в себе все средства, оптимизированные для взаимодействия с базами данных, на стороне SQL Server. Кроме того, имеются пространства имен;

System.Data.Odbc, являющееся надстройкой над обычным ODBC и, таким образом, позволяющее взаимодействовать со всеми источниками данных, доступ к которым возможен через драйверы ODBC;

System. Data.oleDb, инкапсулирующее все возможности технологии OLE DB

System.Data.OracleClient, содержащее в себе классы только для обмена информацией с сервером баз данных Oracle.

Таким образом, для взаимодействия с SQL Server можно использовать классы трех пространств имен: SqlClient, Odbc, OleDb. В дальнейшем мы будем отдавать предпочтение классам SqlClient, специально предназначенным для работы с SQL Server.

Соединение с sql Server

Для того чтобы работать с удаленной базой данных, расположенной на SQL Server, клиентское приложение должно вначале соединиться с сервером. Для этого можно использовать три различных класса: класс OdbcConnection, расположенный в пространстве имен System.Data.Odbc, класс OleDbConnection, расположенный в пространстве имен system.Data.oleDb, класс SqlConnection, расположенный в пространстве имен System.Data.SqlClient.

В листингах 5.2—5.4 представлены примеры соединения с базами данных на стороне SQL Server.

Листинг 5.2

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Data.Odbc;

namespace sql9

{

class Program

{

static void Main(string[] args)

{

try

{

// объект cn будет отвечать за соединение

OdbcConnection cn = new OdbcConnection();

// строка соединения

cn.ConnectionString = "driver=SQL Server;" +

"server=SQL1;dsn=sql;" +

"Initial Catalog=institute;";

// осуществляется соединение

cn.Open();

Console.WriteLine("No error!");

// закрыть соединение

cn.Close();

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

}

}

}

Пространство имен System.Data.odbc содержит различные классы, позволяющие взаимодействовать с SQL Server посредством технологии ODBC. Для соединения следует создать объект класса odbcConnection (см. листинг 5.2). Далее для объекта задается строка соединения (свойство Connectionstring). Строка соединения состоит из нескольких полей. В частности, обратим внимание на поле dsn, содержащее имя источника данных, который должен быть заранее зарегистрирован (см. разд. 5.1), а также на поле initial catalog, где задается имя базы данных на сервере.

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

cn.ConnectionString = "driver=SQL Server;" +

"server=SQL1" +

"Initial Catalog=institute;"+

"User Id=sa1"+

"Password=valsidalv";

Как видим, мы просто задали имя пользователя (точнее, имя учетной записи) и пароль. Само соединение с сервером происходит при выполнении метода Open. Закрытие соединения осуществляется при помощи метода close.

В листинге 5.3 представлен пример соединения с SQL Server при помощи объекта класса OleDbConnection. Обратим внимание на поле Provider. Его значение должно быть sqloledb, что как раз соответствует соединению с SQL Server.

Листинг 5.3

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Data.OleDb;

namespace sql8

{

class Program

{

static void Main(string[] args)

{

try

{

// объект cn будет отвечать за соединение

OleDbConnection cn = new OleDbConnection();

// строка соединения

cn.ConnectionString = "Provider=SQLOLEDB;" +

"Data Source=SQL1;" +

"Initial Catalog=institute;" +

"Integrated Security=SSPI;" +

"Persist Security Info=;" +

"User Id=sa1;Password=valsidalv;";

// осуществляется соединение

cn.Open();

Console.WriteLine("No error!");

// закрыть соединение

cn.Close();

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

}

}

}

Программа в листинге 5.4 полностью идентичная двум предыдущим программам с точки зрения результата. Здесь для соединения используется объект класса SqlConnection. Замечу, что используемые методы и свойства у всех трех рассматриваемых классов одинаковы.

Листинг 5.4

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Data.SqlClient;

namespace sql10

{

class Program

{

static void Main(string[] args)

{

try

{

// объект cn будет отвечать за соединение

SqlConnection cn = new SqlConnection();

// строка соединения

cn.ConnectionString = "Data Source=SQL1;" +

"Initial Catalog=institute;" +

"User Id=sa1;Password=valsidalv;";

// осуществляется соединение

cn.Open();

Console.WriteLine("No error!");

// закрыть соединение

cn.Close();

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

}

}

}

Во всех трех примерах для задания строки соединения с сервером мы использовали свойство ConnectionString. Но можно было бы поступить и иначе. Для этого применяется перегруженный конструктор класса соединения (OdbcConnection, OleDbConnection, SqlConnection). В качестве аргумента ОН как раз принимает строку соединения. В этом случае нет необходимости задавать значение свойства ConnectionString.

Заключая данный раздел, замечу, что во всех трех программах мы использовали блок try/catch для перехвата возможных исключений. Данная структура очень удобна и позволяет быстро диагностировать возникающие ошибки.