Външен език за програмиране
Втори подход за интегриране на БД в ИС е чрез външен език. Естественият за Access е Visual Basic; ние ще ползваме изучавания C# (интегрирането с VB е аналогично). За програмистите, свикнали с процедурен стил, външният език дава повече свобода — но достъпът до данните в РБД и тук става само със SQL заявки.
Двата основни момента на подхода:
- Свързване с базата — осъществява се чрез специализиран софтуер медиатор (database server), който комуникира между процедурната програма и SQL базата.
- Получаване на достъп до данните — в обектно-ориентиран език обикновено като множества от инстанции на класове, чиято структура е аналог на релационните схеми (същият брой атрибути, същите или подходящи типове).
Свързване на C# приложение с Access БД
Във Visual Studio: Tools → Connect to Database → Data Source „Microsoft Access Database File (OLE DB)“ → избираме .accdb файла (потребител Admin, без парола). От Advanced копираме ключовия текст за свързването (connection string). Средата отваря Server Explorer с елементите на базата.
Интегриране в конзолно приложение
Осигуряваме достъпа с два оператора using и два низа:
using System.Data;
using System.Data.OleDb;
string con = "Provider = Microsoft.ACE.OLEDB.12.0; " +
"Data Source=C:\School.accdb";
string query = "SELECT Номер, Име, Фамилия FROM Ученик " +
"WHERE Номер < 6";Трите класа на медиатора OleDb:
| Клас | Роля |
|---|---|
OleDbConnection | свързва приложението с OleDb (приема connection string) |
OleDbCommand | асоциира SQL заявката с базата посредством connection |
OleDbDataReader | чете данните: всяко Read() прочита ЕДИН кортеж и връща true; след последния — false |
using (OleDbConnection connection = new OleDbConnection(con))
{ OleDbCommand comm = new OleDbCommand(query, connection);
connection.Open();
OleDbDataReader reader = comm.ExecuteReader();
while (reader.Read())
{ Console.Write(reader[0].ToString() + " ");
Console.WriteLine(reader[1] + " " + reader[2]);
}
// винаги спирайте четеца, когато е завършил четенето!
reader.Close(); Console.WriteLine("Done");
}Интегриране в приложение с графичен интерфейс
Основната форма Form1 наподобява стартовата форма от Access: етикет „Информационна система *УЧИЛИЩЕ*“, бутони Ученици, Учители, Оценки и КРАЙ. Бутонът Край: Form.ActiveForm.Close(); в събитието button4_Click.
За списъка с ученици добавяме listBox1 (скрит, Visible = false) и бутон ОК. Свързването е същото като в конзолното приложение; в цикъла while заместваме извеждането на конзолата с попълване на списъчната кутия:
listBox1.Items.Add(reader[0] + " " + reader[1].ToString() + " "
+ reader[2] + " " + reader[3]);Какво трябва да запомниш
- Външен език ≠ без SQL: достъпът до РБД винаги е чрез SQL заявки.
- Медиаторът (OleDb) стои между процедурната програма и базата.
- Connection string: Provider + Data Source.
- OleDbConnection → OleDbCommand → OleDbDataReader; Read() чете кортеж по кортеж.
- using блок пази връзката; reader.Close() е задължителен.
- Access заявките в C#: променящи → Stored Procedures, параметризирани → Functions, останалите → Views.