- Автор темы
- #1
Практический пример работы с базами данных через ODBC-драйвер.
Данное приложение является учебным примером, в котором пользователь имеет возможность отправлять SQL-запросы к базе данных Books и просматривать результаты выполнения этих запросов.
Домашнее задание
Разработать визуальный интерфейс для базы данных Library. Требования: возможность добавления, изменения и удаления данных из таблиц базы.
Данное приложение является учебным примером, в котором пользователь имеет возможность отправлять 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. Требования: возможность добавления, изменения и удаления данных из таблиц базы.