Для того, чтобы иметь возможность программного обращения к базе данных, т.е. осуществлять операции вставки, редактирования, удаления информации необходимо осуществить создание программного объекта класса OleDbConnection.
Примечание. OleDb является одной из нескольких поддерживаемых средой Visual Studio технологий работы с базами данных.
Для организации работы с базой данных создадим специальный класс BataBase. Для добавления класса необходимо выбрать проект в дереве решений и нажать на него правой кнопкой мыши, рис. 5, а. В появившемся меню выбрать пункт «Add» \ «New Item». В списке возможных к добавлению элементов проекта выберите «Class», рис. 5, б.
а)
а)
Рис. 5 – Добавление класса
Реализуем в классе DataBase private пустой объект класса OleDbConnection. Этот объект используется в функциях класса OpenConnection, CloseConnection для открытия и закрытия соединения соответственно.
Для работы с таблицей Persons, Phones создадим перечень функций как показано в табл. 2.
Таблица 2 – Перечень функций для работы с Persons, Phones
Название функции | Назначение |
AddPerson | Добавление данных в таблицу Persons |
EditPerson | Добавление данных таблицы Persons |
DeletePerson | Удаление данных таблицы Persons |
CountPerson | Определение количества добавленных персоналий с определенным Ф.И.О., датой рождения |
SelectPerson | Получение всех данных таблицы Persons |
AddPhonePerson | Добавление телефона персоналии |
EditPhonePerson | Редактирование телефона персоналии |
DeletePhonePerson | Удаление телефона персоналии |
CountPhonePerson | Определение количества добавленых телефонов персоналии |
SelectPhoneByPersonId | Получение списка телефонов по ключу персоналии |
Код класса DataBase:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.OleDb;
namespace Lab3
{
public class DataBase
{
private string DataBasePath = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Lab3.mdb;";
private OleDbConnection MyConn = null;
// Открытие соединения
public void OpenConnection()
{
MyConn = new OleDbConnection(DataBasePath);
MyConn.Open();
}
// Закрытие соединения
public void CloseConnection()
{
if (MyConn!= null)
if (MyConn.State!= ConnectionState.Closed)
{
MyConn.Close();
MyConn = null;
}
}
# region Person Работа с таблицей персон
// Выбор всех данных таблицы Persons
public DataTable SelectPerson()
{
OpenConnection();
DataTable dtResult = new DataTable();
OleDbDataAdapter myDA=new OleDbDataAdapter("select * from Person", MyConn);
myDA.Fill(dtResult);
CloseConnection();
return dtResult
}
// Определение кол-ва существующих персон в таблице Persons
public Int32 CountPerson(string Fam, string Name, string Otch, string DateBirth)
{
OpenConnection();
OleDbCommand myComm = new OleDbCommand("select count(*) from Person where Fam=@Fam and Nam=@Nam and Otch=@Otch and DateBirth=@DateBirth", MyConn);
// Добавление параметров SQL запроса
myComm.Parameters.Add("Fam", OleDbType.VarChar).Value = Fam;
myComm.Parameters.Add("Nam", OleDbType.VarChar).Value = Name;
myComm.Parameters.Add("Otch", OleDbType.VarChar).Value = Otch;
myComm.Parameters.Add("DateBirth", OleDbType.VarChar).Value = DateBirth;
Int32 Result = Int32.Parse(myComm.ExecuteScalar().ToString());
CloseConnection();
return Result;
}
// Добавление данных в таблицу Persons
public Int32 AddPerson(string Fam, string Name, string Otch, string DateBirth)
{
OpenConnection();
OleDbCommand myComm = new OleDbCommand("insert into Person (Fam, Nam, Otch, DateBirth) values (@Fam, @Name, @Otch, @DateBirth)", MyConn);
// Добавление параметров SQL запроса
myComm.Parameters.Add("Fam", OleDbType.VarChar).Value = Fam;
myComm.Parameters.Add("Nam", OleDbType.VarChar).Value = Name;
myComm.Parameters.Add("Otch", OleDbType.VarChar).Value = Otch;
myComm.Parameters.Add("DateBirth", OleDbType.VarChar).Value = DateBirth;
Int32 Result = myComm.ExecuteNonQuery();
CloseConnection();
return Result;
}
// Редактирование данных в таблицу Persons
public Int32 EditPerson(Int32 id, string Fam, string Name, string Otch, string DateBirth)
{
OpenConnection();
OleDbCommand myComm = new OleDbCommand("update Person set Fam=@Fam, Nam=@Nam, Otch=@Otch, DateBirth=@DateBirth where id=@id", MyConn);
// Добавление параметров SQL запроса
myComm.Parameters.Add("Fam", OleDbType.VarChar).Value = Fam;
myComm.Parameters.Add("Nam", OleDbType.VarChar).Value = Name;
myComm.Parameters.Add("Otch", OleDbType.VarChar).Value = Otch;
myComm.Parameters.Add("DateBirth", OleDbType.VarChar).Value = DateBirth;
myComm.Parameters.Add("id", OleDbType.Integer).Value = id;
Int32 Result = myComm.ExecuteNonQuery();
CloseConnection();
return Result;
}
// Удаление данных в таблицы Persons
public Int32 DeletePerson(Int32 id)
{
OpenConnection();
OleDbCommand myComm = new OleDbCommand("delete from Person where id=@id", MyConn);
// Добавление параметров SQL запроса
myComm.Parameters.Add("id", OleDbType.Integer).Value = id;
Int32 Result = myComm.ExecuteNonQuery();
CloseConnection();
return Result;
}
#endregion
#region Работа с таблицей Phones
public DataTable SelectPhoneByPersonId(Int32 Person_id)
{
OpenConnection();
DataTable dtResult = new DataTable();
OleDbDataAdapter myDA=new OleDbDataAdapter("select count(*) from Phones where Person_id=@Person_id and Phone=@Phone", MyConn);
myDA.SelectCommand.Parameters.Add(("Person_id", OleDbType.Integer).Value= Person_id;
myDA.Fill(dtResult);
CloseConnection();
return dtResult;
}
// Определение кол-ва существующих телефонов персоны в таблице Phones
public Int32 CountPhonePerson(Int32 Person_id, string Phone)
{
OpenConnection();
OleDbCommand myComm = new OleDbCommand("select count(*) from Phones where Person_id=@Person_id and Phone=@Phone", MyConn);
// Добавление параметров SQL запроса
myComm.Parameters.Add("Person_id", OleDbType.Integer).Value = Person_id;
myComm.Parameters.Add("Phone", OleDbType.VarChar).Value = Phone;
Int32 Result = Int32.Parse(myComm.ExecuteScalar().ToString());
CloseConnection();
return Result;
}
// Добавление телефона персоне по ее id
public Int32 AddPhonePerson(Int32 Person_id, string Phone)
{
OpenConnection();
OleDbCommand myComm = new OleDbCommand("insert into Phones (Person_id, Phone) values (@Person_id, @Phone)", MyConn);
// Добавление параметров SQL запроса
myComm.Parameters.Add("Person_id", OleDbType.VarChar).Value = Person_id;
myComm.Parameters.Add("Phone", OleDbType.VarChar).Value = Phone;
Int32 Result = myComm.ExecuteNonQuery();
CloseConnection();
return Result;
}
// Редактирование телефона персоны по ее id
public Int32 EditPhonePerson(Int32 id, string Phone)
{
OpenConnection();
OleDbCommand myComm = new OleDbCommand("update Phone set Phone=@Phone where id=@id", MyConn);
// Добавление параметров SQL запроса
myComm.Parameters.Add("Phone", OleDbType.VarChar).Value = Phone;
myComm.Parameters.Add("id", OleDbType.Integer).Value = id;
Int32 Result = myComm.ExecuteNonQuery();
CloseConnection();
return Result;
}
// Удаление телефона персоны по ее id
public Int32 DeletePhonePerson(Int32 id, string Phone)
{
OpenConnection();
OleDbCommand myComm = new OleDbCommand("delete from Phone where id=@id", MyConn);
// Добавление параметров SQL запроса
myComm.Parameters.Add("id", OleDbType.Integer).Value = id;
Int32 Result = myComm.ExecuteNonQuery();
CloseConnection();
return Result;
}
#endregion
}
}
Примечание. Для того, чтобы создаваемое программное приложение могло обращаться к базе данных оно должно иметь информацию о местоположении файла базы данных. Эти сведения предоставляются классу OleDbConnection посредством строки соединения (connectionstring). В том случае, если файл базы данных находится в папке Bin\Debug программного приложения путь может состоять только из имени файла. В противном случае необходимо указывать полное место расположения файла в корневой системе компьютера.
Преобразование типов данных от string к Int32 и Double осуществляется специальным методом Parse этих классов (Int32 Test=Int32.Parse(“101”)). Преобразование Int32, Double и др. к String осуществляется вызовом метода ToString() (Int32 A=10; String Test=A.ToString()).