Базы данных для карманного персонального компьютера

ADO.NET и доступ к данным

Разбить на страницы
Показывать лекцию целиком

Технология ADO.NET предназначена для обеспечения доступа к данным в слабосвязанных n-уровневых архитектурах приложений, включая веб-службы []. ADO.NET позволяет обращаться к разнообразным источникам данных, как базы данных различных поставщиков (MS SQL Server, Oracle, MS Access), так и другие источники данных (MS Excel, Outlook, текстовые файлы). Для программирования баз данных SmartDevice, имеющих по определению ограниченную функциональность, наибольшее значение имеют текстовые форматы данных и данные отсоединенных наборов (DataSet). Набор данных не содержит информации об источнике данных, из которого он наполнялся. В результате можно сохранять набор данных как XML-документ и наполнять его данными как из XML- документа, так и текстового файла. Несмотря на это, каждый поставщик данных обязан предоставлять следующие отсоединенные классы:

  • Connection – уникальный сеанс подключения к источнику данных;
  • Command – команды выполнения SQL-операторов и процедур обработки данных;
  • DataReader – последовательный доступ чтения потока результата запроса;
  • DataAdapter – наполнитель отсоединенного набора (DataSet) и редактор источника данных в соответствии с изменениями, произведенными в отсоединенном наборе
  • Рассмотрим, как реализуется с помощью ADO.NET доступ к данным MS Access и MS Excel.

    Задача темы: изучить методику и получить навыки в разработке функциональности приложений, использующих технологию ADO.NET для загрузки данных из файлов MS Access и MS Excel в форму С# для просмотра.

    Разработка: Приложение "Connection" для автоматического подключения к базам данных в форматах mdb и xls.

    Состав выполняемых функций:

  • Файловые операции: импорт данных из файлов MS Access и MS Excel в форму С# через строку подсоединения для просмотра
  • Алгоритмы: программное изменение свойств элемента Windows, предназначенного для просмотра данных
  • Информационно-справочные: О программе
  • Наращивание функциональности не предусматривается.

    Защита данных не предусматривается.

    В качестве входных данных используются два тестовых файла - MS Access и MS Excel. Выходные данные программы – графическое отображение результатов в виде элемента табличного просмотра данных экранных форм для WindowsApplication

    Шаг 1. Организация дискового пространства и источников данных

    Необходимо создать каталог на диске, в который скопировать или создать заново базу данных MS Access и таблицу MS Excel. В нашем примере, каталог – ADO_XLS, в котором размещается приложение С# WindowsApplication. Файлы MS Access и Excel размещаются в каталоге \ADO_XLS\bin\Debug. В базе данных Access "Платежные поручения.mdb" присутствует таблица "Контакты" из двух полей: Код и Контакты, число записей в таблице – три, хотя это непринципиально. В файле Excel "Копия ADO_NET.xls" содержится лист "Содержание" с заполненным столбцом А и числом строк – 22, здесь диапазон строк имеет значение.

    Шаг 2. Тестируем подключение к источникам данных

    Подключение к источникам данных организуется на настольном компьютере с помощью различных драйверов. Для Access должен присутствовать драйвер Microsoft.Jet.OLEDB.4.0, а для Excel – Microsoft OLE DB Provider for ODBC Drivers. В MS Visual Studio 2003 рекомендуется предварительно проверить подключение к источникам данных с помощью этих драйверов. Для этого в главной линейке меню выбираются опции: Сервис -> Подключение к базам данных -> Поставщики -> Microsoft.Jet.OLEDB.4.0 Provider -> Выбирается файл "Платежные поручения.mbd" -> Проверить подключение – для подключения к файлу Access. Аналогично – для Excel, только провайдер указывается уже другой.

    Если тестирование успешно, то в обозревателе серверов (Вид -> Обозреватель серверов) будут видны файлы, к которым выполнено подключение - рис.1.1

    (рис 1.1) Подключение к источникам данных

    Далее следует просмотреть свойства подключенных файлов и скопировать содержание строки подключения (ConnectionString) – рис.1.2. Дело в том, что разные провайдеры имеют разный синтаксис строки подключения, по-этому чтобы не гадать, точнее – чтобы не нарываться на исключения при тестировании приложения, лучше довериться генератору строки в MS Visual Studio.

    (рис 1.2) ConnectionString в окне просмотра свойств подключения к файлу

    Шаг 3. Разработка графического интерфейса приложения

    Для программы используются одна форма ( Form1 ), на которой размещено окно DataGrid для просмотра данных таблиц, две кнопки подключения к источникам данных и Главное меню ( mainMenu ) с единственной опцией "О программе". Примерный дизайн которых показан на рис.1.3.

    (рис 1.3)

    Шаг 4. Расширяем состав библиотек формы 1

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;

    /* добавляем библиотеки подключения к источникам данных. Отметим, что данные библиотеки не доступны для SmartDeviceApplication, поэтому мы и создаем WindowsApplication для настольной компьютерной системы */

    using System.Data;
    using System.Data.Odbc;
    using System.Data.OleDb;

    Шаг 5. Создаем процедуру для кнопки подключения к данным файла Access

    private void button1_Click(object sender, System.EventArgs e) 
    {// Создаем соединение
    System.Data.OleDb.OleDbConnection Коннект=new OleDbConnection();
    // Задаем параметры строки соединения
    Коннект.ConnectionString= "Data Source=Платежные_поручения.mdb;"+
    "Provider=Microsoft.Jet.OLEDB.4.0";

    /* А вот это копия строки соединения, сгенерированная редактором MS Visual Studio:

    Jet OLEDB:Global Partial Bulk Ops=2; Jet OLEDB:Registry Path=; 
    Jet OLEDB:Database Locking Mode=1; 
      Data Source= Платежные_поручения.mdb; 
    Jet OLEDB:Engine Type=5; Provider=Microsoft.Jet.OLEDB.4.0; 
    Jet OLEDB:System database=; Jet OLEDB:SFP=False; 
      persist security info=False;    
    Extended Properties=; Mode=Share Deny None; 
      Jet OLEDB:Encrypt Database=False; 
    Jet OLEDB:Create System Database=False; 
    Jet OLEDB:Don't Copy Locale on Compact=False; 
    Jet OLEDB:Compact Without Replica Repair=False;   
    User ID=Admin; Jet OLEDB:Global Bulk Transactions=1

    Можно видеть, что принципиально важными являются два параметра – источник данных и провайдер, остальные принимаются по умолчанию. */

    /* Формируем SQL – запрос к данным таблицы "Контакты". В нашем случае выбираются все поля и записи таблицы */

    OleDbDataAdapter da = 
    new OleDbDataAdapter ("select * from контакты", Коннект);
    // Создаем таблицу для данных
    DataTable dt =new DataTable();

    /* таблице присваиваем имя, чтобы программно определить свойства DataGrid */

    dt.TableName="Контакты"; 
    da.Fill(dt); // Заполняем таблицу данными из адаптера
    //привязываем элемент просмотра данных программно
    dataGrid1.TableStyles.Clear(); // чистим стиль элемента
    // стиль грид делаем программно
    DataGridTableStyle ts= new DataGridTableStyle();
    // стиль будет разработан для таблицы "Контакты"
    ts.MappingName="Контакты";			
    DataGridTextBoxColumn cs=new DataGridTextBoxColumn();
    cs.MappingName="Код"; // для столбца "Код"
    cs.HeaderText="Код"; // Заголовок столбца – тоже "Код"
    cs.Width=30; // ширина столбца 30 пикселей
    cs.NullText="";
    ts.GridColumnStyles.Add(cs); // добавили в стиль столбцов
    
    // форматируем второй столбец
    cs=new DataGridTextBoxColumn();
    cs.MappingName="Контакты"; // имя столбца "Контакты"
    cs.HeaderText="Контакты";
    cs.Width=240;
    cs.NullText="";
    ts.GridColumnStyles.Add(cs);
    //  добавляем в стиль DataGrid			
    this.dataGrid1.TableStyles.Add(ts);
    dataGrid1.DataSource=dt.DefaultView; // Смотрим, что получилось
    }

    Шаг 6. Создаем процедуру для кнопки подключения к данным файла Excel

    private void button2_Click(object sender, System.EventArgs e) 
    {// создаем соединение с помощью драйвера ODBC 
    System.Data.Odbc.OdbcConnection Коннект=new OdbcConnection(); 
    Коннект.ConnectionString= "Provider=MSDASQL.1;"+
    	"DSN=Excel Files;"+	
    	"DBQ=Копия ADO_NET.xls";

    /* А это копия строки подключения. Почувствуйте разницу:

    Provider=MSDASQL.1;
      Persist Security Info=False;
      Extended Properties="DSN=Excel Files";
      DBQ=F:\LEOPOLD\ADO_NET\ADO_NET.xls;
      DefaultDir=F:\LEOPOLD\ADO_NET;
      DriverId=790;
      MaxBufferSize=2048;
      PageTimeout=5;
      Initial Catalog=F:\LEOPOLD\ADO_NET\ADO_NET

    */

    /* обратите внимание – в SQL – запросе к листу книги "Содержание" указывается диапазон ячеек через знак $ */

    OdbcDataAdapter da = 
    new OdbcDataAdapter ("select * from [Содержание$A1:A33]",Коннект);
    // дальше все аналогично, как в процедуре доступа к файлу Access 
    DataTable  dt =new DataTable();
    dt.TableName="Содержание";
    da.Fill(dt);
    //привязываем
    dataGrid1.TableStyles.Clear();
    // стиль грид делаем программно
    DataGridTableStyle ts= new DataGridTableStyle();
    ts.MappingName="Содержание";
    DataGridTextBoxColumn cs=new DataGridTextBoxColumn();
    cs.Width=270;

    /* Здесь тонкость – в запросе не поддерживается точка, вместо нее генерируется # */

    cs.MappingName="ADO#NET для SmartDevice:";
    // а заголовок столбца поменяем на правильный
    cs.HeaderText="ADO.NET для SmartDevice:";
    cs.NullText="";
    ts.GridColumnStyles.Add(cs);
    this.dataGrid1.TableStyles.Add(ts);
    dataGrid1.DataSource=dt.DefaultView;
    }

    Результат работы кнопок показан на рис. 1.4 и 1.5

    (рис 1.5) Загруженные данные из MS Access(рис 1.4) Загруженные данные из MS Excel

    Шаг 7. Создаем процедуру для опции главного меню "О программе"

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

    private void menuItem1_Click(object sender, System.EventArgs e) {
    MessageBox.Show("Создание соединения с источником данных\n"+
    	"и установка строки связи.\n"+
    	"Байдачный С.С., NET Framework. М., \n"+
    	"Солон-Пресс, 2004, с. 386\n"+
    	"Гамильтон Б. ADO.NET для профессионалов \n"+
    	"СПб., Питер, 2005, с.25","Подробнее..."); 
    }
    Страницы:

    Технология ADO.NET предназначена для обеспечения доступа к данным в слабосвязанных n-уровневых архитектурах приложений, включая веб-службы []. ADO.NET позволяет обращаться к разнообразным источникам данных, как базы данных различных поставщиков (MS SQL Server, Oracle, MS Access), так и другие источники данных (MS Excel, Outlook, текстовые файлы). Для программирования баз данных SmartDevice, имеющих по определению ограниченную функциональность, наибольшее значение имеют текстовые форматы данных и данные отсоединенных наборов (DataSet). Набор данных не содержит информации об источнике данных, из которого он наполнялся. В результате можно сохранять набор данных как XML-документ и наполнять его данными как из XML- документа, так и текстового файла. Несмотря на это, каждый поставщик данных обязан предоставлять следующие отсоединенные классы:

  • Connection – уникальный сеанс подключения к источнику данных;
  • Command – команды выполнения SQL-операторов и процедур обработки данных;
  • DataReader – последовательный доступ чтения потока результата запроса;
  • DataAdapter – наполнитель отсоединенного набора (DataSet) и редактор источника данных в соответствии с изменениями, произведенными в отсоединенном наборе
  • Рассмотрим, как реализуется с помощью ADO.NET доступ к данным MS Access и MS Excel.

    Задача темы: изучить методику и получить навыки в разработке функциональности приложений, использующих технологию ADO.NET для загрузки данных из файлов MS Access и MS Excel в форму С# для просмотра.

    Разработка: Приложение "Connection" для автоматического подключения к базам данных в форматах mdb и xls.

    Состав выполняемых функций:

  • Файловые операции: импорт данных из файлов MS Access и MS Excel в форму С# через строку подсоединения для просмотра
  • Алгоритмы: программное изменение свойств элемента Windows, предназначенного для просмотра данных
  • Информационно-справочные: О программе
  • Наращивание функциональности не предусматривается.

    Защита данных не предусматривается.

    В качестве входных данных используются два тестовых файла - MS Access и MS Excel. Выходные данные программы – графическое отображение результатов в виде элемента табличного просмотра данных экранных форм для WindowsApplication

    Шаг 1. Организация дискового пространства и источников данных

    Необходимо создать каталог на диске, в который скопировать или создать заново базу данных MS Access и таблицу MS Excel. В нашем примере, каталог – ADO_XLS, в котором размещается приложение С# WindowsApplication. Файлы MS Access и Excel размещаются в каталоге \ADO_XLS\bin\Debug. В базе данных Access "Платежные поручения.mdb" присутствует таблица "Контакты" из двух полей: Код и Контакты, число записей в таблице – три, хотя это непринципиально. В файле Excel "Копия ADO_NET.xls" содержится лист "Содержание" с заполненным столбцом А и числом строк – 22, здесь диапазон строк имеет значение.

    Шаг 2. Тестируем подключение к источникам данных

    Подключение к источникам данных организуется на настольном компьютере с помощью различных драйверов. Для Access должен присутствовать драйвер Microsoft.Jet.OLEDB.4.0, а для Excel – Microsoft OLE DB Provider for ODBC Drivers. В MS Visual Studio 2003 рекомендуется предварительно проверить подключение к источникам данных с помощью этих драйверов. Для этого в главной линейке меню выбираются опции: Сервис -> Подключение к базам данных -> Поставщики -> Microsoft.Jet.OLEDB.4.0 Provider -> Выбирается файл "Платежные поручения.mbd" -> Проверить подключение – для подключения к файлу Access. Аналогично – для Excel, только провайдер указывается уже другой.

    Если тестирование успешно, то в обозревателе серверов (Вид -> Обозреватель серверов) будут видны файлы, к которым выполнено подключение - рис.1.1

    (рис 1.1) Подключение к источникам данных

    Далее следует просмотреть свойства подключенных файлов и скопировать содержание строки подключения (ConnectionString) – рис.1.2. Дело в том, что разные провайдеры имеют разный синтаксис строки подключения, по-этому чтобы не гадать, точнее – чтобы не нарываться на исключения при тестировании приложения, лучше довериться генератору строки в MS Visual Studio.

    (рис 1.2) ConnectionString в окне просмотра свойств подключения к файлу

    Шаг 3. Разработка графического интерфейса приложения

    Для программы используются одна форма ( Form1 ), на которой размещено окно DataGrid для просмотра данных таблиц, две кнопки подключения к источникам данных и Главное меню ( mainMenu ) с единственной опцией "О программе". Примерный дизайн которых показан на рис.1.3.

    (рис 1.3)

    Шаг 4. Расширяем состав библиотек формы 1

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;

    /* добавляем библиотеки подключения к источникам данных. Отметим, что данные библиотеки не доступны для SmartDeviceApplication, поэтому мы и создаем WindowsApplication для настольной компьютерной системы */

    using System.Data;
    using System.Data.Odbc;
    using System.Data.OleDb;

    Шаг 5. Создаем процедуру для кнопки подключения к данным файла Access

    private void button1_Click(object sender, System.EventArgs e) 
    {// Создаем соединение
    System.Data.OleDb.OleDbConnection Коннект=new OleDbConnection();
    // Задаем параметры строки соединения
    Коннект.ConnectionString= "Data Source=Платежные_поручения.mdb;"+
    "Provider=Microsoft.Jet.OLEDB.4.0";

    /* А вот это копия строки соединения, сгенерированная редактором MS Visual Studio:

    Jet OLEDB:Global Partial Bulk Ops=2; Jet OLEDB:Registry Path=; 
    Jet OLEDB:Database Locking Mode=1; 
      Data Source= Платежные_поручения.mdb; 
    Jet OLEDB:Engine Type=5; Provider=Microsoft.Jet.OLEDB.4.0; 
    Jet OLEDB:System database=; Jet OLEDB:SFP=False; 
      persist security info=False;    
    Extended Properties=; Mode=Share Deny None; 
      Jet OLEDB:Encrypt Database=False; 
    Jet OLEDB:Create System Database=False; 
    Jet OLEDB:Don't Copy Locale on Compact=False; 
    Jet OLEDB:Compact Without Replica Repair=False;   
    User ID=Admin; Jet OLEDB:Global Bulk Transactions=1

    Можно видеть, что принципиально важными являются два параметра – источник данных и провайдер, остальные принимаются по умолчанию. */

    /* Формируем SQL – запрос к данным таблицы "Контакты". В нашем случае выбираются все поля и записи таблицы */

    OleDbDataAdapter da = 
    new OleDbDataAdapter ("select * from контакты", Коннект);
    // Создаем таблицу для данных
    DataTable dt =new DataTable();

    /* таблице присваиваем имя, чтобы программно определить свойства DataGrid */

    dt.TableName="Контакты"; 
    da.Fill(dt); // Заполняем таблицу данными из адаптера
    //привязываем элемент просмотра данных программно
    dataGrid1.TableStyles.Clear(); // чистим стиль элемента
    // стиль грид делаем программно
    DataGridTableStyle ts= new DataGridTableStyle();
    // стиль будет разработан для таблицы "Контакты"
    ts.MappingName="Контакты";			
    DataGridTextBoxColumn cs=new DataGridTextBoxColumn();
    cs.MappingName="Код"; // для столбца "Код"
    cs.HeaderText="Код"; // Заголовок столбца – тоже "Код"
    cs.Width=30; // ширина столбца 30 пикселей
    cs.NullText="";
    ts.GridColumnStyles.Add(cs); // добавили в стиль столбцов
    
    // форматируем второй столбец
    cs=new DataGridTextBoxColumn();
    cs.MappingName="Контакты"; // имя столбца "Контакты"
    cs.HeaderText="Контакты";
    cs.Width=240;
    cs.NullText="";
    ts.GridColumnStyles.Add(cs);
    //  добавляем в стиль DataGrid			
    this.dataGrid1.TableStyles.Add(ts);
    dataGrid1.DataSource=dt.DefaultView; // Смотрим, что получилось
    }

    Шаг 6. Создаем процедуру для кнопки подключения к данным файла Excel

    private void button2_Click(object sender, System.EventArgs e) 
    {// создаем соединение с помощью драйвера ODBC 
    System.Data.Odbc.OdbcConnection Коннект=new OdbcConnection(); 
    Коннект.ConnectionString= "Provider=MSDASQL.1;"+
    	"DSN=Excel Files;"+	
    	"DBQ=Копия ADO_NET.xls";

    /* А это копия строки подключения. Почувствуйте разницу:

    Provider=MSDASQL.1;
      Persist Security Info=False;
      Extended Properties="DSN=Excel Files";
      DBQ=F:\LEOPOLD\ADO_NET\ADO_NET.xls;
      DefaultDir=F:\LEOPOLD\ADO_NET;
      DriverId=790;
      MaxBufferSize=2048;
      PageTimeout=5;
      Initial Catalog=F:\LEOPOLD\ADO_NET\ADO_NET

    */

    /* обратите внимание – в SQL – запросе к листу книги "Содержание" указывается диапазон ячеек через знак $ */

    OdbcDataAdapter da = 
    new OdbcDataAdapter ("select * from [Содержание$A1:A33]",Коннект);
    // дальше все аналогично, как в процедуре доступа к файлу Access 
    DataTable  dt =new DataTable();
    dt.TableName="Содержание";
    da.Fill(dt);
    //привязываем
    dataGrid1.TableStyles.Clear();
    // стиль грид делаем программно
    DataGridTableStyle ts= new DataGridTableStyle();
    ts.MappingName="Содержание";
    DataGridTextBoxColumn cs=new DataGridTextBoxColumn();
    cs.Width=270;

    /* Здесь тонкость – в запросе не поддерживается точка, вместо нее генерируется # */

    cs.MappingName="ADO#NET для SmartDevice:";
    // а заголовок столбца поменяем на правильный
    cs.HeaderText="ADO.NET для SmartDevice:";
    cs.NullText="";
    ts.GridColumnStyles.Add(cs);
    this.dataGrid1.TableStyles.Add(ts);
    dataGrid1.DataSource=dt.DefaultView;
    }

    Результат работы кнопок показан на рис. 1.4 и 1.5

    (рис 1.5) Загруженные данные из MS Access(рис 1.4) Загруженные данные из MS Excel

    Шаг 7. Создаем процедуру для опции главного меню "О программе"

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

    private void menuItem1_Click(object sender, System.EventArgs e) {
    MessageBox.Show("Создание соединения с источником данных\n"+
    	"и установка строки связи.\n"+
    	"Байдачный С.С., NET Framework. М., \n"+
    	"Солон-Пресс, 2004, с. 386\n"+
    	"Гамильтон Б. ADO.NET для профессионалов \n"+
    	"СПб., Питер, 2005, с.25","Подробнее..."); 
    }
    Вернуться к учебному плану