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

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

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

59. Работа с базой через ODBC-драйвер.

Redman

<FORUMTEAM>
Команда форума
Регистрация
13.11.17
Сообщения
13.340
Реакции
8.377
Баллы
1.200
FTC
208¢
Практический пример работы с базами данных через ODBC-драйвер.
Данное приложение является учебным примером, в котором пользователь имеет возможность отправлять SQL-запросы к базе данных Books и просматривать результаты выполнения этих запросов.
Код:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using System.Data.Odbc;

namespace CSharpApplication.ODBC
{
    class ODBCExample : Form
    {
        // Источник данных
        DataSet dataset = new DataSet("Library");
        // Элемент управления "сетка"
        DataGrid datagrid = new DataGrid();
        // Объект для подключения к базе данных
        OdbcConnection connection = new OdbcConnection();
        // Объект для выполнения запросов к базе данных
        OdbcCommand command = new OdbcCommand();
        // Объект для связи между базой данных и источником данных
        OdbcDataAdapter adapter = new OdbcDataAdapter();
       
        // Текст запроса
        TextBox Query = new TextBox();
        // Выполнить запрос
        Button Execute = new Button();

        static void Main()
        {
            Application.Run(new ODBCExample());
        }

        ODBCExample()
        {
            this.WindowState = FormWindowState.Maximized;
            this.Text = "ODBC Example";
            this.Icon = new Icon(GetType(), "books.ico");

            // Строка соединения с базой данных
            string con = @"Driver={Microsoft Access Driver (*.mdb)};DBQ=books.mdb";
            connection.ConnectionString = con;
            // Открываем соединение
            connection.Open();

            // Устанавливаем связь между объектами связи и команд
            command.Connection = connection;
            // Запрос по умолчанию
            command.CommandText = "select * from books";
           
            // Указываем запрос для выполнения
            adapter.SelectCommand = command;
            // Заполняем объект источника данных
            adapter.Fill(dataset);
           
            // Запрет удаления данных
            dataset.Tables[0].DefaultView.AllowDelete = false;
            // Запрет модификации данных
            dataset.Tables[0].DefaultView.AllowEdit = false;
            // Запрет добавления данных
            dataset.Tables[0].DefaultView.AllowNew = false;

            // Размещаем сетку
            datagrid.Parent = this;
            // Привязываем сетку к источнику данных
            // (с этого момента она будет отображать его содержимое)
            datagrid.DataSource = dataset.Tables[0];
            datagrid.ClientSize = new Size(this.ClientSize.Width, this.ClientSize.Height - 100);
            datagrid.Location = new Point(0, 0);
            datagrid.Anchor = AnchorStyles.Bottom | AnchorStyles.Top |
                AnchorStyles.Left | AnchorStyles.Right;

            Query.Parent = this;
            Query.Dock = DockStyle.Bottom;
            Query.Height = 80;
            Query.Multiline = true;
            Query.ScrollBars = ScrollBars.Vertical;
            Query.Font = new Font("Arial", 12);
            // Ставим фокус на текстовое поле
            Query.Select();

            Execute.Parent = this;
            Execute.Dock = DockStyle.Bottom;
            Execute.Height = 20;
            Execute.Text = "Выполнить запрос";
            Execute.Click += new EventHandler(Execute_Click);
        }
       
        // Обработчик закрытия формы
        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            // Закрываем соединение с базой данных
            connection.Close();
           
            base.OnClosing (e);
        }

        // Обработчик нажатия на кнопку
        private void Execute_Click(object sender, EventArgs e)
        {
            ExecuteQuery();
        }

        // Попытка выполнения запроса
        private void ExecuteQuery()
        {
            // Переводим текст запроса в нижний регистр
            Query.Text.ToLower();
            // Подставляем его в объект
            command.CommandText = Query.Text;
           
            // Запрос на выборку?
            if(Query.Text.StartsWith("select"))
            {
                // Указываем запрос для выполнения
                adapter.SelectCommand = command;
                // Очищаем содержимое источника данных
                dataset.Clear();

                try
                {
                    // Заполняем объект источника данных
                    adapter.Fill(dataset);
                    // Привязываем сетку к источнику данных
                    datagrid.DataSource = dataset.Tables[0];
                }
                catch(Exception ex)
                {
                    // Обработка исключений
                    // (например, некорректный запрос)
                    MessageBox.Show(ex.Message);
                }
            }
            // Другой тип запроса
            else
            {
                try
                {
                    // Попытка выполнить запрос пользователя
                    command.ExecuteNonQuery();
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
                // Очищаем содержимое источника данных                                           
                dataset.Clear();
                // Снова запрашиваем содержимое таблицы
                command.CommandText = "select * from books";
                adapter.SelectCommand = command;

                try
                {
                    // Заполняем источник данных
                    adapter.Fill(dataset);
                    datagrid.DataSource = dataset.Tables[0];
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }
}

Домашнее задание
Разработать визуальный интерфейс для базы данных Library. Требования: возможность добавления, изменения и удаления данных из таблиц базы.
 
Сверху Снизу