Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л1_Технология ADO.doc
Скачиваний:
14
Добавлен:
11.07.2019
Размер:
520.7 Кб
Скачать

Получение сторонних поставщиков данных ado .Net

Кроме поставщиков данных, поставляемых фирмой Microsoft, существует и множество сторонних поставщиков данных для различных СУБД. Скорее всего, у вас не возникнет трудностей при получении поставщика данных ADO.NET непосредственно от разработчика СУБД, но на всякий случай возьмите на заметку следующий сайт: http://www. sqlsummit.com/ DataProv.htm.

Это один из множества сайтов, где собрана документация на все известные поставщики данных ADO.NET и ссылки на дополнительную информацию и сайты загрузки. Здесь перечислены различные поставщики ADO.NET, например, SQLite, DB2, MySQL, PostgreSQL и Sybase.

Классы, которые зависят от поставщика

Как было сказано выше, классы, которые зависят от поставщика находятся в разных пространствах имен. Например, для Microsoft SQL-сервера эти классы объявлены в пространстве имен System.Data.SqlClient, классы для баз данных, поддерживающих технологию OLEDB объявлены в пространстве имен System.Data.OleDb.

Имена классов зависят от поставщика данных, но по функциональности эти классы одинаковые. Ниже приведен список классов для соединения на различные СУБД:

Имя класса

Имя СУБД или механизм доступа

SqlConnection

MS SQL Server

OracleConnection

SQL Server Oracle

MySqlConnection

Sql Server MySQL

OleDbConnection

Для любого СУБД, которая поддерживает механизм OleDB

Заметим, что если вы научитесь работать с одним СУБД, то вы легко справитесь и с остальными, так как эти сборки содержат одинаковые классы для работы с данными. Ниже в основном будем показывать работу с MS SQL Server.

Классы, зависящие от типа СУБД

Ниже рассмотрим классов, которые предназначены для работы с базой данных MS SQL Server и для баз данных, поддерживающих технологию OLEDB.

1. Классы SqlConnection, OleDbConnection. Объект класса SqlConnection используется для установления соединения с базой данных на MS SQL-сервере. Объект класса OleDbConnection применяется для подключения к любой СУБД, которая поддерживает технологию OLEDB, например, Access или Oracle.

2. Классы SqlCommand, OleDbCommand. Объект этих классов применяются для формирования SQL-запроса, либо для вызова сохраненной процедуры.

3. Классы SqlDataAdapter, OleDbDataAdapter. Объекты этих классов используются для перемещения записей между объектом DataSet и базой данных или на Microsoft SQL-сервере, или базой данных под управлением СУБД, поддерживающих технологии OLEDB.

Общие классы для работы с данными

Пространство имен System.Data содержит общие классы, используемые всеми поставщиками данных ADO .NET. Эти классы позволяют хранить локальную копию информации, которая находится в базе данных. Ниже перечислены некоторые классы для работы с данными.

1. Класс DataSet. Объекты этого класса используются для предоставления локальной копии информации, помещенной в базу данных.

2. Класс DataTable. Объект класса DataTable используется для представления таблицы. В один объект DataSet можно поместить несколько объектов DataTable.

3. Класс DataRow. Объект этого класса используется для представления записи. В один объект DataTable можно поместить несколько объектов Datarow.

4. Класс DataColumn. Объект этого класса используется для представления столбца. В один объект Datarow можно поместить несколько объектов DataColumn.

Эти классы объявлены в пространстве имен System.Data.

Создание приложения базы данных

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

Создадим Windows-приложение. Для вывода данных таблицы, на форме разместим поля ListBox и кнопку Вывод данных БД.

Всю работу, связанную с подключением к базе данных и выводом данных таблицы Person будем выполнять в обработчике события Click кнопки. Для простоты и ясности изложения, описание кода мы приведем по шагам, описывая при этом назначение каждого шага.

Шаг 1. Соединение к SQL-серверу.

1. Формирование строки подключения, которая содержит параметры соединения с базой данных. Для соединения с базой данных MyBase должна быть определена следующая строка:

string connectionString = "Data Source=(local)\\SQLEXPRESS;" +

"Initial Catalog = MyBase;" +

"Integrated Security = True" ;

Приведем описание параметров строки подключения:

DataSource – имя компьютера, с которым мы устанавливаем соединение, в нашем примере мы соединяемся к SQL-серверу, который установлен на локальном компьютере.

Initial Catalog – имя базы данных, к которой мы подключаемся;

Integrated Security = True – эта строка определяет, что при подключении к базе данных используется те же права доступа, что и при загрузке Windows.

Строку подключения легко просмотреть в окне свойств. Для этого, в окне Server Explorer следует выделить узел базы данных MyBase и из контекстного меню выбрать команду Properties. Тогда в окне свойств появляются свойства подключения. Среди этих свойств имеется и свойство Connection String.

2. Создание объекта SqlConnection для соединения с базой данных:

SqlConnection mySqlConnection = new SqlConnection(connectionString);

3. Установление соединения с базой данных при помощи метода Open() объекта SqlConnection:

mySqlConnection.Open();

После того, как работа с базой данных совершится следует закрыть соединение с базой данных путем вызова метода Close().

Шаг 2. Формирование SQL-запроса

1. Формирование строки SQL-запроса:

string selectString = "SELECT Name, Post, Oklad FROM Person";

Этот SELECT-запрос, извлекает полей Name, Post и Oklad из таблицы Person.

2. Создание объекта SqlCommand для хранения SELECT-запроса. Для этого следует вызвать метод CreateCommand() объекта mySqlConnection.

SqlCommand mySqlCommand = mySqlConnection.CreateCommand();

3. Присвоение свойству CommandText объекта SqlCommand строки с SQL-запросом:

mySqlCommand.CommandText = selectString;

Шаг 3. Создать объект SqlDataAdapter

Объект класса SqlDataAdapter используется для перемещения данных из SQL-сервера на локальную копию базы данных, которая хранится в объекте класса Dataset.

1. Создаем объект класса SqlDataAdapter:

SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();

2. Присвоение свойству SelectCommand указателя на объект SqlCommand:

mySqlDataAdapter.SelectCommand = mySqlCommand;

Шаг 4. Перемещение данных из SQL-сервера на объект DataSet

1. Для хранения результатов SQL-запроса в локальной базе данных создадим объект класса DataSet:

DataSet myDataSet = new DataSet();

2. Перемещение данных из SQL-сервера в объект класса DataSet. Для этого вызовем метод Fill() объекта SqlDataAdapter.

mySqlDataAdapter.Fill(myDataSet, "PersonData");

Заметим, что здесь имя "PersonData" является именем локальной базы данных, которая содержит данных из таблицу Person.

3. Объект DataSet имеет свойство Tables типа коллекция. Через это свойство можно имеет доступ к таблицам базы данных.

DataTable myDataTable = myDataSet.Tables["PersonData"];

Шаг 5. Вывести значений полей каждой записи

Для вывода значений полей каждой записи следует использовать объект DataRow. В классе DataTable определено свойство Rows, которое возвращает коллекцию объектов DataRow. Свойство Rows можно использовать для перебора всех объектов DataRow в цикле foreach. Например:

foreach (DataRow personRow in Persons.Rows)

{

listBox1.Items.Add(personRow["Name"]);

listBox2.Items.Add(personRow["Oklad"]);

listBox3.Items.Add(personRow["BirthDay"]);

}

Как видим, имя каждого поля передается объекту DataRow в квадратных скобках, а затем объект DataRow возвращает значение этого поля.

Код приложения

Мы рассмотрели все этапы соединения с базой данных, которая находится в SQL-сервере. Здесь приведем код обработчика события Click для кнопки:

using System;

using System.Data;

using System.Data.SqlClient;

. . . . . . . . . . . . . . . . . .

private void button1_Click(object sender, EventArgs e)

{

//Создание связи с базой данных

string ConnectionString = "Data Source=(local)\\SQLEXPRESS;" +

"Initial Catalog=MyBase;" +

"Integrated Security=True" ;

SqlConnection mySqlConnection =

new SqlConnection(ConnectionString);

mySqlConnection.Open();

//Создание SQL-команды

string selectString = "SELECT Name, Post, Oklad FROM Person";

SqlCommand mySqlCommand = mySqlConnection.CreateCommand();

mySqlCommand.CommandText = selectString;

//Закрепление SQL-адаптеру объекта команды

SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();

mySqlDataAdapter.SelectCommand = mySqlCommand;

//Определение набора данных dataSet и заполнение его

DataSet myDataSet = new DataSet();

mySqlDataAdapter.Fill(myDataSet, "Person");

DataTable Person = myDataSet.Tables["Person"];

// Вывод данных на экран

foreach (DataRow personRow in Person.Rows)

{

listBox1.Items.Add(personRow["Name"]);

listBox2.Items.Add(personRow["Oklad"]);

listBox3.Items.Add(personRow["BirthDay"]);

}

// Выход из приложения

mySqlConnection.Close();

}

Запустите приложение на выполнение. Как видно, на полях ListBox появятся фамилии работников, их должность и оклад.

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

Взаимосвязь классов, которые предназначены для вывода данных локальной базы данных на форме достаточно прост:

1. Объект класса DataSet имеет коллекцию Tables, откуда по названию таблицы можно получить доступ к таблице.

2. Объект класса DataTable имеет коллекцию Rows – записей таблицы. С помощью оператора foreach можно пробежаться по всем записям таблицы.

3. Для обращения к полю выбранной записи используем имя поля.