Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / doc100 / ЛАБОРАТОРНАЯ РАБОТА#3c#.doc
Скачиваний:
38
Добавлен:
01.08.2013
Размер:
156.16 Кб
Скачать

Лабораторная работа № 3

ADO.NET

3.1 Цель работы

Изучить возможности доступа к базам данных, используя технологию ADO.NET, получить практические навыки по работе с классами ADO.NET.

3.2 Теоретические сведенья

3.2.1 Общие сведения об ADO.NET

ADO.NET (ActiveX Data Object .NET) – набор классов, используемый для доступа к источникам данных в платформе .NET. ADO.NET поддерживает асинхронный доступ к данным и сериализацию данных, получаемых из хранилища, в формате XML.

ADO.NET не предлагает единого набора типов для связи со всеми СУБД. В пространстве имен System.Data.Common находятся базовые классы и интерфейсы, а соответствующие производные типы для разных поставщиков данных – в одноименных пространствах System.Data.SqlClient, System.Data.Odbc и т.п.

И хотя имена этих реализующих типов разные, можно создать весьма универсальный программный код, благодаря использованию полиморфизма и специального объекта класса DbProviderFactory, с помощью которого извлекаются объекты данных, специфичные для каждого поставщика.

Библиотеки ADO.NET могут использоваться в рамках двух концептуально различных способах взаимодействия: на связном уровне, для чего используются классы подсоединенных объектов или несвязном уровне, где нужны классы отсоединенных объектов (рис. 3.1).

Рисунок 3.1 – Организация классов ADO.NET

При использовании связного уровня программный код непосредственно соединяется с соответствующим хранилищем данных, и отсоединяется от него, когда задачи взаимодействия решены. Несвязный уровень, напротив, позволяет получить набор объектов, функционирующих как клиентские копии внешних данных.

3.3 Текст программы

Form1.cs

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 Npgsql;

namespace lab3

{

public partial class Form1 : Form

{

//Ссылка на подключение

private NpgsqlConnection connection = null;

//Ссылка на DataSet

private DataSet dataSet = null;

//Ссылки на DataAdapter для группы и студента

private NpgsqlDataAdapter prodDataAdapter = null;

private NpgsqlDataAdapter tovarDataAdapter = null;

//Ссылки на вспомогательные формы

private Form2 form2 = null;

private Form3 form3 = null;

private Form4 form4 = null;

public void setConnection(NpgsqlConnection connection)

{

this.connection = connection;

}

//Создание DataSet

private DataSet getDataSet()

{

if (dataSet == null)

{

dataSet = new DataSet();

dataSet.Tables.Add("Prodavec");

dataSet.Tables.Add("Tovar");

}

return dataSet;

}

//Получить форму установления соединения

public Form2 getForm2()

{

if (form2 == null)

{

form2 = new Form2();

form2.setPerent(this);

}

return form2;

}

//Установить соединение с базой

public NpgsqlConnection Connect(string host, int port, string database,

string user, string parol)

{

NpgsqlConnectionStringBuilder stringBuilder =

new NpgsqlConnectionStringBuilder();

stringBuilder.Host = host;

stringBuilder.Port = port;

stringBuilder.UserName = user;

stringBuilder.Password = parol;

stringBuilder.Database = database;

stringBuilder.Timeout = 30;

NpgsqlConnection connection =

new NpgsqlConnection(stringBuilder.ConnectionString);

connection.Open();

return connection;

}

//Заполнить DataGridView1 студентами

public void FillDataGridView1ByProdavec()

{

getDataSet().Tables["Prodavec"].Clear();

prodDataAdapter = new NpgsqlDataAdapter(

"SELECT * FROM Prodavec", connection);

new NpgsqlCommandBuilder(prodDataAdapter);

prodDataAdapter.Fill(getDataSet(), "Prodavec");

dataGridView1.DataSource = getDataSet().Tables["Prodavec"];

}

//Заполнить DataGridView2 студентами заданной группы

public void FillDataGridView2ByTovar(string name)

{

getDataSet().Tables["Tovar"].Clear();

tovarDataAdapter = new NpgsqlDataAdapter(

"SELECT Tovar.id, name, price, ves, prodavecid " +

"FROM Prodavec, Tovar " +

"WHERE Prodavec.id = Tovar.prodavecid AND nameprod = '" + name + "'", connection);

new NpgsqlCommandBuilder(tovarDataAdapter);

tovarDataAdapter.Fill(dataSet, "Tovar");

dataGridView2.DataSource = getDataSet().Tables["Tovar"];

}

//Получить форму добавления и замены группы

public Form3 getForm3()

{

if (form3 == null)

{

form3 = new Form3();

form3.setPerent(this);

}

return form3;

}

//Добавить группу

public void AddGroup(string name,

string surname, int god)

{

getDataSet().Tables["Prodavec"].Rows.Add(0, name,

surname, god);

prodDataAdapter.Update(getDataSet(), "Prodavec");

}

//Заменить группу

public void UpdateGroup(int row, string name,

string surname, int god)

{

getDataSet().Tables["Prodavec"].Rows[row]["nameprod"] = name;

getDataSet().Tables["Prodavec"].Rows[row]["surname"] = surname;

getDataSet().Tables["Prodavec"].Rows[row]["god"] = god;

prodDataAdapter.Update(getDataSet(), "Prodavec");

}

//Получить форму добавления и замены студента

public Form4 getForm4()

{

if (form4 == null)

{

form4 = new Form4();

form4.setPerent(this);

}

return form4;

}

//Добавить студента

public void AddStudent(string name,

int price, int ves, long prodId)

{

getDataSet().Tables["Tovar"].Rows.Add(0, name, price, ves, prodId);

tovarDataAdapter.Update(getDataSet(), "Tovar");

}

//Заменить студента

public void UpdateStudent(int row, string name,

int price, int ves)

{

getDataSet().Tables["Tovar"].Rows[row]["name"] = name;

getDataSet().Tables["Tovar"].Rows[row]["price"] = price;

getDataSet().Tables["Tovar"].Rows[row]["ves"] = ves;

tovarDataAdapter.Update(getDataSet(), "Tovar");

}

public Form1()

{

InitializeComponent();

}

private void подключениеКБазеToolStripMenuItem_Click(object sender, EventArgs e)

{

getForm2().Visible = true;

}

private void отключениеОтБазыToolStripMenuItem_Click(object sender, EventArgs e)

{

connection.Close();

}

private void добавитьToolStripMenuItem_Click(object sender, EventArgs e)

{

getForm3().Visible = true;

getForm3().setButton1Visible(true);

getForm3().setButton2Visible(false);

getForm3().setTextBox1Text("");

getForm3().setTextBox2Text("");

getForm3().setTextBox3Text("");

}

private void удалитьToolStripMenuItem_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

DialogResult dr = MessageBox.Show("Удалить продавца?", "",

MessageBoxButtons.YesNo);

if (dr == DialogResult.Yes)

{

getDataSet().Tables["Prodavec"].Rows[selectedRow].Delete();

prodDataAdapter.Update(getDataSet(), "Prodavec");

getDataSet().Clear();

FillDataGridView1ByProdavec();

}

}

private void заменитьToolStripMenuItem_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

string name = (string)getDataSet().Tables["Prodavec"].Rows[selectedRow].ItemArray[1];

string surname = (string)getDataSet().Tables["Prodavec"].Rows[selectedRow].ItemArray[2];

int god = (int)getDataSet().Tables["Prodavec"].Rows[selectedRow].ItemArray[3];

getForm3().Visible = true;

getForm3().setButton1Visible(false);

getForm3().setButton2Visible(true);

getForm3().setTextBox1Text(name);

getForm3().setTextBox2Text(surname);

getForm3().setTextBox3Text(System.Convert.ToString(god));

getForm3().setRow(selectedRow);

}

private void добавитьToolStripMenuItem1_Click(object sender, EventArgs e)

{

getForm4().Visible = true;

getForm4().setButton1Visible(true);

getForm4().setButton2Visible(false);

getForm4().setTextBox1Text("");

getForm4().setTextBox2Text("");

getForm4().setTextBox3Text("");

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

long prodavecId = (long)getDataSet().Tables["Prodavec"].Rows[selectedRow].ItemArray[0];

string nameprod = (string)getDataSet().Tables["Prodavec"].Rows[selectedRow].ItemArray[1];

getForm4().setGroupName(nameprod);

getForm4().setGroupId(prodavecId);

}

private void удалитьToolStripMenuItem1_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView2.SelectedCells[0].RowIndex;

DialogResult dr = MessageBox.Show("Удалить товар?", "",

MessageBoxButtons.YesNo);

if (dr == DialogResult.Yes)

{

getDataSet().Tables["Tovar"].Rows[selectedRow].Delete();

tovarDataAdapter.Update(getDataSet(), "Tovar");

string key = (string)dataGridView1

.Rows[selectedRow].Cells[1].Value;

FillDataGridView2ByTovar(key);

}

}

private void заменитьToolStripMenuItem1_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView2.SelectedCells[0].RowIndex;

string name = (string)getDataSet().Tables["Tovar"]

.Rows[selectedRow].ItemArray[1];

int price = (int)getDataSet().Tables["Tovar"]

.Rows[selectedRow].ItemArray[2];

int ves = (int)getDataSet().Tables["Tovar"]

.Rows[selectedRow].ItemArray[3];

getForm4().Visible = true;

getForm4().setButton1Visible(false);

getForm4().setButton2Visible(true);

getForm4().setTextBox1Text(name);

getForm4().setTextBox2Text(System.Convert.ToString(price));

getForm4().setTextBox3Text(System.Convert.ToString(ves));

getForm4().setRow(selectedRow);

int selectedRow1 = dataGridView1.SelectedCells[0].RowIndex;

string groupName = (string)getDataSet().Tables["Prodavec"]

.Rows[selectedRow1].ItemArray[1];

getForm4().setGroupName(groupName);

}

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

{

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

string key = (string)dataGridView1.Rows[selectedRow].Cells[1].Value;

FillDataGridView2ByTovar(key);

}

private void сортировка1ToolStripMenuItem_Click(object sender, EventArgs e)

{

DataViewManager dvm = new DataViewManager();

dvm.DataSet = dataSet;

dvm.DataViewSettings["Prodavec"].Sort = "nameprod";

dataGridView1.DataSource = dvm;

dataGridView1.DataMember = "Prodavec";

}

private void сортировка2ToolStripMenuItem_Click(object sender, EventArgs e)

{

DataViewManager dvm = new DataViewManager();

dvm.DataSet = dataSet;

dvm.DataViewSettings["Prodavec"].Sort = "id";

dataGridView1.DataSource = dvm;

dataGridView1.DataMember = "Prodavec";

}

}

}

Form2.cs

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 Npgsql;

namespace lab3

{

public partial class Form2 : Form

{

private Form1 perent;

public void setPerent(Form1 perent)

{

this.perent = perent;

}

public Form2()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string server = "localhost";

int port = 5432;

string database = "market";

string user = "postgres";

string passwd = "06031992";

NpgsqlConnection connection =

perent.Connect(server, port, database, user, passwd);

perent.setConnection(connection);

perent.FillDataGridView1ByProdavec();

this.Visible = false;

}

}

}

Form3.cs

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;

namespace lab3

{

public partial class Form3 : Form

{

private Form1 perent = null;

private int row;

public void setPerent(Form1 perent)

{

this.perent = perent;

}

public void setRow(int row)

{

this.row = row;

}

public void setTextBox1Text(string text)

{

textBox1.Text = text;

}

public void setTextBox2Text(string text)

{

textBox2.Text = text;

}

public void setTextBox3Text(string text)

{

textBox3.Text = text;

}

public void setButton1Visible(bool value)

{

this.button1.Visible = value;

}

public void setButton2Visible(bool value)

{

this.button2.Visible = value;

}

public Form3()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

perent.AddGroup(textBox1.Text, textBox2.Text, System.Convert.ToInt32(textBox3.Text));

perent.FillDataGridView1ByProdavec();

this.Visible = false;

}

private void button2_Click(object sender, EventArgs e)

{

perent.UpdateGroup(row, textBox1.Text, textBox2.Text, System.Convert.ToInt32(textBox3.Text));

perent.FillDataGridView1ByProdavec();

this.Visible = false;

}

}

}

Form4.cs

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;

namespace lab3

{

public partial class Form4 : Form

{

private Form1 perent = null;

private string nameprod;

private long groupId;

private int row;

public void setPerent(Form1 perent)

{

this.perent = perent;

}

public void setGroupName(string nameprod)

{

this.nameprod = nameprod;

}

public void setGroupId(long groupId)

{

this.groupId = groupId;

}

public void setRow(int row)

{

this.row = row;

}

public void setTextBox1Text(string text)

{

textBox1.Text = text;

}

public void setTextBox2Text(string text)

{

textBox2.Text = text;

}

public void setTextBox3Text(string text)

{

textBox3.Text = text;

}

public void setButton1Visible(bool value)

{

this.button1.Visible = value;

}

public void setButton2Visible(bool value)

{

this.button2.Visible = value;

}

public Form4()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

perent.AddStudent(textBox1.Text, System.Convert.ToInt32(textBox2.Text), System.Convert.ToInt32(textBox3.Text), groupId);

perent.FillDataGridView2ByTovar(nameprod);

this.Visible = false;

}

private void button2_Click(object sender, EventArgs e)

{

perent.UpdateStudent(row, textBox1.Text, System.Convert.ToInt32(textBox2.Text),

System.Convert.ToInt32(textBox3.Text));

perent.FillDataGridView2ByTovar(nameprod);

this.Visible = false;

}

}

}

Рисунок 3.2 – Интерфейс программы

Выводы

В данной лабораторной были изучены возможности доступа к базам данных, используя технологию ADO.NET, получены практические навыки по работе с классами ADO.NET.

Соседние файлы в папке doc100