Бази даних / lab12
.docxЛабораторна робота №12
Тема: Розробка програмного забезпечення на платформі С#/.NET для роботи з СУБД MySQL .
Мета: Набути навичок по написанню програм з використанням C#/.NET для роботи з СУБД MySQL при допомозі ODBC.
Хід роботи:
ODBC (Open DataBase Connectivity)– це відкритий інтерфейс доступу до баз даних, являється індустріальним стандарт, і забезпечує повну сумісніть роботи з будь-якими СУБД.
Connector/ODBC або MyODBC - це драйвер MySQL ODBC, який використовується в середовищі .NET для доступу до MySQL через ODBC.NET.
ODBC.NET Data Provider – провайдер даних, що обгорткою навколо ODBC з’єднання Цей провайдер даних визначено в збірці System.Data, яка є складовою частиною .NET, починаючи з версії 1.1.
Схема роботи з СУБД при використанні ODBC.NET Data Provider наведена на рис. 1
Рисунок 1 – Схема роботи СУБД
Щоб скористатися класами ODBC.NET, необхідно встановити MySQL ODBC Driver, який можна скачати з сайту dev.mysql.com
Адміністратор джерел даних ODBC (ODBC Data Source Administrator) в Windows, дозволяє створювати нові DSN(Database Source Name) з’єднання та керувати драйверами і налаштуваннями ODBC системи
Для доступу до цієї програми в Windows XP необхідно зайти в панель керування (Control Panel) -> Адміністрування (Administrative Tools) -> Джерела даних (ODBC) (Data Sources (ODBC)).
Рисунок 2 – Вікно налаштувань ODBC
Для створення нового DSN (що буде доступий для всіх користувачів), виберіть вкладку Системний DSN (System DSN). Для створення DSN для поточного користувача – вкладку користувацький DSN (User DSN). Далі натисніть кнопку Додати (add).
Тепер необхідно налаштувати поля для створюваного DSN (рис 4).
У полі Ім'я джерела даних (Data Source Name) введіть ім'я для доступу до джерела даних. Це може бути будь-яке довільне ім'я.
У полі Опис(Description) введіть текст, опису з'єднання.
У полі Сервер(Server) введіть ім'я хоста MySQL-сервера. За замовчуванням - це локальний комп’ютер (127.0.0.1).
У полі Користувач(User) введіть логін користувача для з'єднання з СУБД.
У полі Пароль(Password) введіть пароль для даного з'єднання.
В полі База даних(Database) повинен автоматично зявитися перелік баз даних, до яких користувач має право доступу.
Рисунок 3 – Налаштування параметрів DSN.
Для виконання лабораторної роботи використано базу даних із попередніх лабораторних робіт. База даних із якою буде працювати програма в даному випадку має наступну структуру див. рисунок 4.
Рисунок 4 – Структура бази даних
Код програми клієнта для доступу до бази даних:
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.Odbc;
namespace OdbcGUI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Clear();
DBconnect con = new DBconnect();
string qwer;
qwer = "SELECT * FROM cash WHERE id=0";
if (radioButton1.Checked)
{
qwer = "SELECT * FROM cash";
}
if (radioButton2.Checked)
{
qwer = "SELECT * FROM cash ORDER BY sum asc";
}
if (radioButton3.Checked)
{
qwer = "SELECT * FROM cash ORDER BY sum desc";
}
if (radioButton4.Checked)
{
qwer = "SELECT * FROM cash WHERE cat_poz='"+comboBox1.SelectedItem.ToString()+"'";
}
if (radioButton5.Checked)
{
qwer = "SELECT * FROM cash WHERE rahunok='" + comboBox2.SelectedItem.ToString() + "'";
}
OdbcDataReader www = con.query(qwer);
while (www.Read()) {
string id = www.GetString(0);
string data = www.GetString(1);
string rah = www.GetString(2);
string cat = www.GetString(3);
string pod_cat = www.GetString(4);
string sum = www.GetString(7);
string[] row1 = { "" + id + "", "" + rah + "", "" + data + "", "" + cat + "", "" + pod_cat + "", "" + sum + "" };
dataGridView1.Rows.Add(row1);
}
}
private void tabPage1_Click(object sender, EventArgs e)
{
}
private void Form1_Shown(object sender, EventArgs e)
{
try
{
DBconnect con = new DBconnect();
OdbcDataReader www = con.query("SELECT * FROM rahunok");
while (www.Read())
{
string rah = www.GetString(1);
comboBox2.Items.Add(rah);
comboBox3.Items.Add(rah);
comboBox6.Items.Add(rah);
}
www = con.query("SELECT * FROM categ");
while (www.Read())
{
string cat = www.GetString(1);
comboBox1.Items.Add(cat);
comboBox4.Items.Add(cat);
comboBox5.Items.Add(cat);
}
}
catch (Exception ex) {
MessageBox.Show("Помилка запиту", "Бази даних", MessageBoxButtons.OK);
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
try
{
if (radioButton6.Checked)
{
string qwer = "INSERT INTO categ (`id`,`cat`,`p_key`) VALUES (NULL,'" + textBox1.Text.ToString() + "',1)";
DBconnect con = new DBconnect();
OdbcCommand MyCom = new OdbcCommand(qwer, con.open());
MyCom.ExecuteNonQuery();
}
if (radioButton7.Checked)
{
string qwer = "INSERT INTO rahunok (`id`,`cat`,`key`) VALUES (NULL,'" + textBox2.Text.ToString() + "',1)";
DBconnect con = new DBconnect();
OdbcCommand MyCom = new OdbcCommand(qwer, con.open());
MyCom.ExecuteNonQuery();
}
if (radioButton8.Checked)
{
string qwer = "INSERT INTO cash (`id`,`data`,`rahunok`,`cat_poz`,`sec_cat_poz`,`kolit`,`izmir`,`sum`) " +
" VALUES (NULL,'" + textBox5.Text.ToString() + "','" + comboBox3.SelectedItem.ToString() + "','" + comboBox4.SelectedItem.ToString() + "','" + textBox6.Text.ToString() + "',1,1,'" + textBox7.Text.ToString() + "')";
DBconnect con = new DBconnect();
OdbcCommand MyCom = new OdbcCommand(qwer, con.open());
MyCom.ExecuteNonQuery();
}
MessageBox.Show("Виконано запит", "Бази даних", MessageBoxButtons.OK);
}
catch (Exception ex) {
MessageBox.Show("Помилка запиту", "Бази даних", MessageBoxButtons.OK);
}
}
private void button3_Click(object sender, EventArgs e)
{
try
{
if (radioButton9.Checked)
{
string qwer = "DELETE FROM cash WHERE id=" + textBox3.Text.ToString() + "";
DBconnect con = new DBconnect();
OdbcCommand MyCom = new OdbcCommand(qwer, con.open());
MyCom.ExecuteNonQuery();
}
if (radioButton10.Checked)
{
string qwer = "UPDATE cash SET "
+ "data='" + textBox10.Text.ToString() + "',"
+ "rahunok='" + comboBox6.SelectedItem.ToString() + "',"
+ "cat_poz='" + comboBox5.SelectedItem.ToString() + "',"
+ "sec_cat_poz='" + textBox9.Text.ToString() + "',"
+ "sum='" + textBox8.Text.ToString() + "' "
+ "WHERE id='" + textBox4.Text.ToString() + "'";
DBconnect con = new DBconnect();
OdbcCommand MyCom = new OdbcCommand(qwer, con.open());
MyCom.ExecuteNonQuery();
MessageBox.Show("Запит виконано", "Бази даних", MessageBoxButtons.OK);
}
} catch(Exception ex) {
MessageBox.Show("Помилка запиту","Бази даних",MessageBoxButtons.OK);
}
}
}
public class DBconnect
{
string myconstring = "DRIVER=MySQL ODBC 5.2 Unicode Driver; SERVER = 127.0.0.1; DATABASE=javtest; UID=javtest; PASSWORD=12345678; OPTION=3;";
public OdbcConnection open()
{
OdbcConnection con = new OdbcConnection(myconstring);
con.Open();
return con;
}
public OdbcDataReader query(string qwer)
{
OdbcCommand MyCom = new OdbcCommand(qwer, open());
OdbcDataReader Mydata;
Mydata = MyCom.ExecuteReader();
return Mydata;
}
Після запуску програми виводиться нове вікно де можна здійснити вибірку із бази за параметрами які там зображено. Також переходячи по закладках компоненту можна вставляти оновляти і видаяти записи..рис.4
Рисунок 4 – Закладка програми «Перегляд».
Закладка Втавити запис зображена на рисунку 5.
Рисунок 5 – Закладка Вставлення запису
Рисунок 6 – Оновленн/Видаленн записів
Висновок: Я набув навичок по написанню програм з використанням C#/.NET для роботи з СУБД MySQL при допомозі ODBC.