Предполагается, что к моменту написания приложения соответствующая база данных уже создана.
Объектная модель ADO.NET реализует отсоединенный доступ к данным. При этом в Visual Studio.NET существует множество ВСТРОЕННЫХ мастеров и дизайнеров, которые позволяют реализовать механизмы доступа к БД еще на этапе разработки программного кода.
С другой стороны, задача получения доступа к данным может быть решена непосредственно во время выполнения приложения.
Концепция доступа к данным в ADO.NET основана на использовании двух компонентов:
- НАБОРА ДАННЫХ (представляется объектом класса DataSet) со стороны клиента. Это локальное временное хранилище данных;
- ПРОВАЙДЕРА ДАННЫХ (представляется объектом класса DataProvider). Это посредник, обеспечивающий взаимодействие приложения и базы данных со стороны базы данных (в распределенных приложениях – со стороны сервера).
ADO.NET. Объектная модель
Объектная модель ADO.NET предполагает существование (при написании приложения для работы с базой данных — использование) двух множеств классов, выполняющих четко определенные задачи при работе с базой данных:
Классы подсоединенных объектов обеспечивают установление соединения с базой данных и управление базой со стороны приложения; классы отсоединенных объектов обеспечивают сохранение, использование и преобразование полученной от базы данных информации на стороне приложения.
Далее рассматриваются классы отсоединенных объектов объектной модели ADO.NET. Их подробному описанию посвящаются следующие разделы пособия. При этом классы отсоединенных объектов могут быть самостоятельно использованы в приложении наряду с обычными компонентами и элементами управления, даже если в приложении и не предполагается организовывать работу с базами данных.
|
DataTable
Каждый объект DataTable представляет одну таблицу базы данных. Таблица в каждый конкретный момент своего существования характеризуется:
- СХЕМОЙ таблицы,
- СОДЕРЖИМЫМ таблицы (информацией).
При этом СХЕМА таблицы (структура объекта DataTable) определяется двумя наборами:
- множеством столбцов таблицы (набор DataColumns, состоящий из множества объектов DataColumn),
- множеством ограничений таблицы (набор Constraints, состоящий из множества объектов Constraint).
Учебный проект
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.OleDb;
using System.Data.Common;
using System.Collections;
namespace WindowsFormsApplication9
{
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
DataTable tableCustomers;
OleDbDataAdapter adapter;
void MyInit()
{
OleDbConnection objConnection =
new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Jet OLEDB:Engine Type=5; Data Source=c:\\db1.mdb");
OleDbCommand selectCommand = new OleDbCommand();
selectCommand.Connection = objConnection;
selectCommand.CommandText = "SELECT * FROM Работники";
selectCommand.CommandType = CommandType.Text;
adapter = new OleDbDataAdapter(selectCommand);
tableCustomers = new DataTable();
try
{
adapter.Fill(tableCustomers);
}
catch (OleDbException exc)
{
tableCustomers = null;
MessageBox.Show(exc.Message, "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
selectCommand.Connection.Close();
}
tableCustomers.PrimaryKey =
new DataColumn[] { tableCustomers.Columns["Табельный"] };
DataRow row = tableCustomers.Rows.Find(1);
MessageBox.Show(row["Образование"].ToString());
tableCustomers.DefaultView.Sort = "ФИО ASC";
tableCustomers.DefaultView.RowFilter = "[Табельный]>2";
dataGridView1.DataSource = tableCustomers;
DataRow[] rows = tableCustomers.Select("[Образование]='высшее'", "Образование ASC");
|
listBox1.Items.Clear();
// Заполняем список
foreach (DataRow row1 in rows)
{
listBox1.Items.Add(
"(" + row1["Образование"] + ") " + "\t"
+ row1["Табельный"].ToString());
}
Object result = tableCustomers.Compute("Sum(Табельный)", null);
MessageBox.Show(String.Format("Суммарный табельный (зачем?)\n"
+ "(по курсу 30 грн. за штуку): {0:C}",// Спецификатор денежного формата
Convert.ToDecimal(result) * 30.0m));
}
new void Update()
{
if (tableCustomers.GetChanges() == null)
return;
// Создаем построитель команды
OleDbCommandBuilder commandBuilder =
new OleDbCommandBuilder(adapter);
// Перезаписать поверх
commandBuilder.ConflictOption = ConflictOption.OverwriteChanges;
// Отправить изменения в БД
adapter.Update(tableCustomers);
}
private void button2_Click(object sender, EventArgs e)
{
Update();
}
private void button1_Click(object sender, EventArgs e)
{
MyInit();
}
}
}
Индивидуальное задание
Для БД, спроектированной и реализованной в предыдущих лабораторных работах, выполнить создание источника данных средствами Visual Studio (язык программирования C#, тип проекта WinForms), разместить на форме требуемые компоненты, выполнить подключение таблицы к DataGridView и обеспечить навигацию по содержимому таблицы и ее редактирование.
Лабораторная работа №8