ADO.NET. Управление базами данных. Связь по схеме OLE DB провайдера. Коррекция стилей DataGridView, страница 2

Табица Exams

Имя поля

Тип данных

Свойства

ExamID

AutoNumber (первичный ключ)

Field Size=Long Integer, Increment

StudID

Number

Field Size=Long Integer, Required=Yes

Course

Text

Field Size=50

Credit

Yes/No

Format=True/False

MyDate

Date/Time

Mark

Number

Field Size=Byte

Связь между таблицами имеет следующий вид.

   

·  Поля StudID и ExamID в своих таблицах должны быть полями первичного ключа. Способ определения ключей автоматический. В Access этот тип полей описывается атрибутом Increment, а в SQL Server — IDENTITY.

·  Введите в таблицы несколько строк данных и сохраните базу в файле Students.mdb в папке Data проекта.

·  Вы можете добавить в проект сам файл Students.mdb. При этом включится мастер Data Source Configuration Wizard и предложит  выбрать автоматически генерируемые объекты ADO.NET. Пока они нам не нужны, поэтому нажмите Cancel.

·  Создайте обработчик события Load главной формы приложения и вставьте в него код, приведенный ниже:

   DataSet ds = new DataSet ();    // Создаем главные объекты ADO.NET

   OleDbConnection cn = new OleDbConnection ( // Соединение с базой данных

    @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=..\..\Data\Students.MDB");

   //==== В качестве SQL-команды задаем: "Выбрать все строки табKицы студентов"

   OleDbCommand cmd = new OleDbCommand ("SELECT * FROM Studs", cn);

   OleDbDataAdapter da = new OleDbDataAdapter (cmd); // Адаптер передает команду провайдеру

   try  // Попытка открыть таблицу Studs базы Students.MDB и заполнить DataSet

   {

    da.Fill (ds, "Studs");

   }

   catch (OleDbException ex)

   {

    MessageBox.Show (ex.Message);

    return;

   }

   finally

   {

    if (cn.State == ConnectionState.Open)

      cn.Close();

   }

   gridStud.DataSource = ds;     // Complex DataBinding

   gridStud.DataMember = ds.Tables[0].TableName;

Если вы аккуратно проделали все указанные действия, то после запуска приложения увидите окно такого вида.

  

Комментарии

·  Схема связи данных OLE DB выполнена по законам технологии COM. Необходимые COM-интерфейсы реализованы классами OleDbConnection, OleDbDataAdapter и OleDbCommand из пространства имен OleDb. Эти классы взаимодействуют с подсистемой OLE DB, и являются удобной оболочкой над соответствующими функциями API. Они позволяют работать с источниками данных различной природы (простые текстовые файлы, файлы электронных таблиц и файлы баз данных).

·  Класс OleDbConnection реализует функциональность интерфейса IDbConnection. Другие классы, (например, SqlConnection) реализуют этот же интерфейс, но по-своему. Строка соединения состоит из подстрок, которые  образуют пары типа атрибут = значение;.

·  При создании объектов типа DbConnection повышенное внимание обращайте на правильность задания файлового пути. Для создания соединения с базами данных по схеме OLE DB в строке соединения необходимо правильно указать тип провайдера (см. Provider =...).

·  Свойство ConnectionString позволяет управлять установками соединения даже после создания объекта одного из классов DbConnection. При этом обычно меняют источник данных (Data Source).

·  Текст SQL-команды: SELECT * FROM Studs передан конструктору OleDbCommand в качестве параметра. Он позволяет сгенерировать запрос на выбор всех строк таблицы. Ссылка на объект класса OleDbCommand подается на вход конструктора класса OleDbDataAdapter, который выполняет роль проводника между источником данных и их потребителем — объектом ds класса DataSet.

·  Классы из категории DbCommand позволяют управлять данными после установления соединения. Они пользуются либо операторами языка SQL, либо готовыми процедурами (stored procedures). Результатом их действия являются таблицы (result sets) или отдельные числа, которые возвращаются в виде потоков (streams). Потоки либо попадают в DataSet (как в нашем случае), либо читаются с помощью объектов DbDataReader . Команды содержат коллекцию параметров (Parameters), которыми можно управлять, уточняя запросы.