• Добро пожаловать на сайт - Forumteam.digital !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

62. Пример работы с ADO.NET.

Redman

<FORUMTEAM>
Команда форума
Регистрация
13.11.17
Сообщения
13.340
Реакции
8.377
Баллы
1.200
FTC
208¢
Прелюдия к практическому примеру.
Если обратиться к первоисточникам (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) произвольной базы данных (в базе более одной таблицы).
 
Сверху Снизу