- •Создание базы данных в среде Visual Studio .Net
- •Просмотр структуры базы данных
- •Views – представления таблиц, т.Е. Вид таблицы при выводе на экран;
- •Создание таблиц
- •Установление связи между таблицами
- •Поставщики (провайдеры) данных
- •Получение сторонних поставщиков данных ado .Net
- •Классы, которые зависят от поставщика
- •Компоненты Visual Studio для вывода данных таблицы
- •Соединение с базой данных ms Access
- •Программный доступ к базе данных Access
Получение сторонних поставщиков данных 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. Для обращения к полю выбранной записи используем имя поля.