Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Прелюдия к практическому примеру.

Если обратиться к первоисточникам (MSDN), то можно заметить, что классы для работы с ODBC и классы для работы с OleDb чрезвычайно схожи как по названиям, так и по названиям методов и свойств, которые они содержат. В данном разделе мы рассмотрим функцию, которая отсутствует в классе для работы с ODBC (надеюсь, читатель сумеет ответить на вопрос почему). Эта функция позволяет определить структуру базы данных, к которой произошло подключение.

Класс OleDbConnection

public DataTable GetOleDbSchemaTable(Guid schema, object[] restrictions);

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

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

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

  1. Имя каталога базы данных или null, если провайдер не поддерживает каталоги.
  2. Имя схемы базы данных или null, если провайдер не поддерживает схемы.
  3. Имя таблицы или null, если необходимо получить информацию о всех таблицах.
  4. Тип таблицы, например, "TABLE" - таблицы, "VIEW" - представления, "SYSTEM TABLE" - системные таблицы и т. д.
Более подробную информацию можно получить, изучив практические 
примеры, или заглянув в MSDN.

Практический пример работы с базами с помощью ADO.NET.

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

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;

namespace CSharpApplication.OleDb
{
    class OleDbExample : Form
    {
        // Источник данных
        DataSet dataset = new DataSet("Library");
        // Сетка
        DataGrid datagrid = new DataGrid();
        // Объект для подключения к базы данных через
        // OleDb Provider
        OleDbConnection connection = new OleDbConnection();
        
        static void Main()
        {
            Application.Run(new OleDbExample());
        }

        OleDbExample()
        {
            this.WindowState = FormWindowState.Maximized;
            this.Text = "OleDb Example";

            // Строка соединения для Access'овской базы данных
            string con = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Library.mdb";
            connection.ConnectionString = con;
            // Открываем соединение
            connection.Open();

            // Получаем список таблиц пользователя, находящихся в базе
            DataTable Tables = connection.GetOleDbSchemaTable(
                OleDbSchemaGuid.Tables,
                new object[] {null, null, null, "TABLE"});

            // Перебираем строки полученной таблицы
            foreach(DataRow row in Tables.Rows)
            {
                // Вынимаем имя таблицы пользователя (3-й столбец)
                string Name = (string)row[2];
            
                // Вынимаем структуру столбцов для этой таблицы
                DataTable ColumnsInTable = connection.GetOleDbSchemaTable(
                    OleDbSchemaGuid.Columns,
                    new object[] {null, null, Name, null});

                // Удаляем "излишние" данные
                // (Определяются опытным путем)
                ColumnsInTable.Columns.RemoveAt(0);
                ColumnsInTable.Columns.RemoveAt(0);
                ColumnsInTable.Columns.RemoveAt(0);
                ColumnsInTable.Columns.RemoveAt(1);
                ColumnsInTable.Columns.RemoveAt(1);
                ColumnsInTable.Columns.RemoveAt(4);
                ColumnsInTable.Columns.RemoveAt(5);
                ColumnsInTable.Columns.RemoveAt(5);
                ColumnsInTable.Columns.RemoveAt(6);
                ColumnsInTable.Columns.RemoveAt(9);
                ColumnsInTable.Columns.RemoveAt(9);
                ColumnsInTable.Columns.RemoveAt(10);
                ColumnsInTable.Columns.RemoveAt(10);
                ColumnsInTable.Columns.RemoveAt(10);
                ColumnsInTable.Columns.RemoveAt(10);
                ColumnsInTable.Columns.RemoveAt(10);
                ColumnsInTable.Columns.RemoveAt(10);
                
                // Присваиваем этой таблице имя
                ColumnsInTable.TableName = Name;

                // Добавляем таблицу в источник данных
                dataset.Tables.Add(ColumnsInTable);
            }          

            datagrid.Parent = this;
            // Указываем на отображаемый сеткой источник данных
            datagrid.DataSource = dataset;
            datagrid.ClientSize = this.ClientSize;
            datagrid.Location = new Point(0, 0);
            datagrid.Anchor = AnchorStyles.Bottom | AnchorStyles.Top |
                AnchorStyles.Left | AnchorStyles.Right;

            // Заголовок сетки
            datagrid.CaptionText = "Structure of tables of database \"Library\"";
            // Шрифт заголовка сетки
            datagrid.CaptionFont = new Font("Verdana", 16);
            // Цвет ссылок на названия таблиц
            datagrid.LinkColor = Color.Blue;
            // Шрифт сетки
            datagrid.Font = new Font("Arial", 10);
            // Сетка предназначена только для чтения
            datagrid.ReadOnly = true;
            
            // Разворачиваем имена таблиц
            datagrid.Expand(-1);
        }

        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            // Закрываем соединение
            connection.Close();
            base.OnClosing (e);
        }
    }
}

Домашнее задание

Реализовать построение схемы данных (а-ля Access) произвольной базы данных (в базе более одной таблицы).


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru