002 — Вывод таблицы базы данных Microsoft Access в компоненте dataGridView

Вывод таблицы базы данных Microsoft Access в компоненте dataGridView


Содержание



Условие задачи

Пусть имеется база данных, созданная в приложении Microsoft Access.

Имя файла базы данных mydb.mdb”. Файл размещается на диске по следующему пути:

C:\Programs\C_Sharp\WindowsFormsApplication1\mydb.mdb

База данных имеет несколько таблиц, одна из которых имеет название “Order”.

Задача состоит в том, чтобы с помощью средств языка C# осуществить подключение к базе данных и вывести таблицу с именем «Order» на форму.

Приложение реализовать как Windows Forms Application.

Общий вид таблиц и связей между ними изображен на рисунке 1.

Microsoft Access схема базы данных

Рис. 1. Связи между таблицами базы данных

 


Выполнение

1. Создание приложения.

Загружаем MS Visual Studio. Подробный пример создания приложения по шаблону Windows Forms описывается здесь.

Исходный код формы приложения имеет вид (файл Form1.cs):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }
   }
}

Как видно из листинга, в пространстве имен WindowsFormsApplication1 есть только конструктор формы, в котором вызывается метод InitializeComponent().

 


2. Подключение к базе данных. Чтение строки подключения Connection String.

Осуществим подключение базы данных MS Access к нашему приложению.

В итоге получаем строку подключения к базе данных Connection String. Эта строка в дальнейшем будет использована в нашем приложении.

Чтобы получить корректную строку подключения к базе данных, нужно выделить базу данных в панели Server Explorer (mydb.mdb) и в окне “Properties” прочитать (скопировать) значение свойства “Connection String” (рис. 2, красное выделение). Следует учесть, что слеш ‘\’ в строке на C# нужно заменить на ‘\\’ (два слеша) согласно синтаксису языка.

Visual Studio свойство Connection String

Рис. 2. Чтение свойства Connection String

 


3. Размещение компонента типа dataGridView.

Выносим на форму компонент dataGridView (рис. 3), представляющий компонент-таблицу, в которой будет выведена наша таблица “Order” из базы данных. Получаем объект-переменную под названием dataGridView.

Visual Studio Компонент DataGridView на панели Toolbox

Рис. 3. Компонент DataGridView на панели Toolbox

Размещение компонента dataGridView на форме изображено на рисунке 4.

Visual Studio Компонент dataGridView

Рис. 4. Компонент dataGridView на главной форме приложения

 


4. Изменение программного кода.

4.1. Добавление переменных SQL-запроса и строки подключения к базе данных.

Активируем текст модуля Form1.cs (главная форма) с помощью Solution Explorer. В программный код формы вводим дополнительные переменные CmdText и ConnString.

Переменная CmdText будет содержать строку SQL-запроса для вывода всех записей таблицы “Order”. Переменная ConnString представляет собой строку подключения к базе данных (см. п. 2). Общий вид программного кода класса формы следующий:

public partial class Form1 : Form
{
 public string CmdText = "SELECT * FROM [Order]";
 public string ConnString = "Provider=Microsoft.Jet.OLEDB.4.0; DataSource=C:\\Programs\\C_Sharp\\WindowsFormsApplication1\\mydb.mdb";
  public Form1()
  {
    InitializeComponent();
  }
}

 


4.2. Подключение пространства имен OleDb.

В Microsoft Visual Studio взаимодействие с файлом данных Microsoft Access осуществляется с помощью поставщика данных OLE DB или ODBC. Поставщик данных OLE DB обеспечивает доступ к данным, находящимся в любом хранилище данных, если оно поддерживает классический протокол OLE DB на основе технологии COM. Этот поставщик состоит из типов, которые определены в пространстве имен System.Data.OleDb.

В последующих шагах мы будем использовать методы из этого пространства имен. Поэтому, вначале файла Form1.cs после строки

using System.Windows.Forms;

нужно добавить строку подключения пространства имен OleDb:

using System.Data.OleDb;

 


4.3. Создание объекта типа OleDbDataAdapter.

В конструкторе формы после вызова

InitializeComponent();

Добавляем строку создания объекта типа OleDbDataAdapter:

OleDbDataAdapter dA = new OleDbDataAdapter(CmdText, ConnString);

Объект типа OleDbDataAdapter организовывает пересылку наборов данных с вызываемым процессом. Адаптеры данных содержат набор из четырех внутренних объектов команд. Это команды чтения, вставки, изменения и удаления информации. Как видно из программного кода, конструктор объекта получает входящими параметрами строку запроса на языке SQL (переменная CmdText) и строку подключения к базе данных (переменная ConnString). Таким образом, после выполнения данного кода, объект адаптера уже связан с нашей базой данных.

 


4.4. Создание объекта набора данных DataSet.

После создания адаптера данных (OleDbDataAdapter) создаем объект типа DataSet (набор данных):

DataSet ds = new DataSet();

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

 


4.5. Заполнение таблицы “Order” на основе SQL-запроса.

Следующая команда – это заполнение набора данных (переменная ds) значениями записей из базы данных на основе SQL-запроса, содержащегося в адаптере данных dA с помощью метода Fill():

dA.Fill(ds, "[Order]");

 


4.6. Визуализация данных в dataGridView1.

На данный момент данные из таблицы “Order” считаны в объекте ds (типа DataSet), представляющем собой набор данных.

Для их отображения необходимо чтобы свойство DataSource компонента dataGridView1 ссылалось на первую таблицу (в нашем случае одна таблица) набора данных ds. Программный код этой операции имеет следующую реализацию:

dataGridView1.DataSource = ds.Tables[0].DefaultView;

После этого данные из таблицы “Order” отобразятся на форме (рис. 5).

 


5. Весь програмний код.

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsFormsApplication1
{
  public partial class Form1 : Form
  {
    public string CmdText = "SELECT * FROM [Order]";
    public string ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\\Programs\\C_Sharp\\WindowsFormsApplication1\\mydb.mdb";
    public Form1()
    {
      InitializeComponent();
      OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CmdText, ConnString);
      // создаем объект DataSet
      DataSet ds = new DataSet();
      // заполняем таблицу Order  
      // данными из базы данных
      dataAdapter.Fill(ds, "[Order]");
      dataGridView1.DataSource = ds.Tables[0].DefaultView;
    }
  }
}

Результат выполнения приложения изображен на рис. 5.

MS Visual Studio выполнение приложения форма

Рис. 5. Результат выполнения приложения

 


6. Схема взаимодействия.

Общая схема взаимодействия между объектами изображена на рис. 6.

Microsoft Access схема взаимодействия база данных

Рис. 6. Схема взаимодействия между объектами для доступа к базе данных

Таким образом, можно выводить на форму любую таблицу базы данных. Условия выведения данных из базы данных задаются в строке SQL-запроса в переменной CmdText.

Например, если в CmdText задать следующую строку:

CmdText = "SELECT * FROM [Order] WHERE [NameOfSender] LIKE 'І%'";

то в результате из базы данных будут извлекаться записи, начинающиеся с символа ‘I’.

 


Связанные темы