You are on page 1of 7

Laboratorul 5

Lucrul cu baze de date n Visual C#

Ce ne propunem astzi?
n laboratorul de astzi ne propunem s realizm o aplicaie de gestiune a datelor
studenilor, date care sunt stocate ntr-o baz de date Microsoft Access (Figura 1).

Figura 1. Fereastra principal a aplicaiei.

Mai pe larg, vom proceda astfel


Primul pas n realizarea acestei aplicaii este crearea bazei de date propriu-zise. Pentru
aceasta, se va deschide aplicaia Microsoft Access i se va crea o baz de date goal (Blank
desktop database) care va fi salvat n directorul bin\Debug al proiectului.
Odat creat baza de date, comutai vizualizarea pe Design view i construii structura
tabelului, adugnd cmpurile ce se pot vedea n Figura 2. Cmpul Nr_matricol va fi ales
cheie primar (click dreapta pe numele cmpului Primary key). Un cmp sau un set de
cmpuri de tip cheie primar identific n mod unic fiecare nregistrare din tabel. Odat
declarat cheie primar, un cmp nu poate conine duplicate sau valori NULL. Se aleg chei
primare cmpuri de tip AutoNumber (cmpuri numerice cu auto-incrementare), cmpuri de
care suntem siguri c nu vor conine valori duplicate (de exemplu CNP sau un numr unic de
identificare), sau mai multe cmpuri care prin combinare dau o valoare unic.

Laborator 5 MTP

Dup ce au fost introduse i stabilite proprietile cmpurilor, se va salva tabelul cu numele


Studenti apoi se vor aduga cteva nregistrri.

Figura 2. Structura tabelului

Atenie!
Se recomand ca n numele tabelelor i a cmpurilor dintr-o baz de date s nu
folosii caracterul spaiu! Astfel, vei evita apariia erori la legarea controalelor
la cmpurile bazei de date i la operaiile de salvare a datelor n baza de date.

n continuare se crea o aplicaie Visual C# .NET de tip Windows Forms Application care va
conine o fereastr de dimensiuni fixe precum cea din Figura 1.
Fereastra va conine un meniu care va implementa aciunile din Figura 3 i o bar de unelte
care va permite navigarea printre nregistrrile din baza de date i apelarea rapid a
aciunilor din meniu.

Figura 3. Meniul ferestrei principale.

Pe fereastr se vor mai aduga: un control BindingNavigator, o component BindingSource,


12 etichete (Label) cu numele celor 12 cmpuri din tabelul Studenti, iar alturat lor, 12
controale dup cum urmeaz:

Lucrul cu baze de date n Visual C#

Nr_matricol: TextBox.

Nume: TextBox.

Prenume: TextBox

Data_nasterii: DateTimePicker (cu proprietile Format = Short, ShowUpDown = True).

Facultate: ComboBox (avnd valori posibile AC, ETC, MEC, CT i CI).

An_studiu i Grupa: ComboBox (avnd valori posibile: 1, 2, 3, 4).

Nota 1, Nota 2, Nota 3, Nota 4, Nota 5: ComboBox (cu valori posibile: 5, 6, 7, 8, 9, 10).

Controlul BindingNavigator v pune la dispoziie comenzi pentru parcurgerea nregistrrilor


din baza de date. Obiectele de tip BindingSource ncapsuleaz datele din baza de date la care
v legai prin intermediul aplicaiei i ofer funcii pentru manipularea acestora.
BindingNavigator va naviga printre datele din BindingSource, iar controale de pe formular
(cum ar fi casetele de text i ComboBox-urile) vor fi legate la acest BindingSource.
n continuare se dorete editarea codului surs al programului. n Visual Studio .NET lucrul cu
baze de date se poate realiza utiliznd tehnologiile OLEDB sau ADO.
OLEDB (Object Linking and Embedding, Database) este un set de interfee proiectat de
Microsoft pentru accesarea a diferite tipuri de date stocate ntr-o manier uniform. A fost
proiectat ca un nlocuitor de un nivel mai nalt, fiind de fapt succesorul lui ODBC,
extinzndu-i caracteristicile. OLEDB separ, printr-un set de abstractizri, datele de aplicaia
care are nevoie s le acceseze. OLEDB este divizat la nivel conceptual ntre consumatori i
furnizori. Consumatorii sunt aplicaiile care au nevoie s acceseze datele iar furnizorul este
componenta software care implementeaz interfaa i drept urmare care red datele
consumatorului.
ADO (ActiveX Data Objects) reprezint un set de obiecte utilizate pentru accesarea surselor
de date. ADO furnizeaz un nivel de abstractizare ntre client i interfeele OLEDB. ADO
permite dezvoltatorului s scrie programe care acceseaz datele fr s tie cum este
implementat baza de date. Sunt necesare cunotine privind baza de date doar pentru
conectare. Nu sunt necesare cunotine de SQL pentru a accesa baza de date, dei se poate
folosi ADO pentru a executa comenzi SQL.
ADO este bazat pe OLEDB, cele dou nu sunt separate, nu sunt tehnologii distincte. OLEDB,
fiind la un nivel mai jos dect ADO, este mai rapid. ADO prezint un subset din capabilitile
OLEDB i abstractizeaz mult din funcionarea OLEDB.

Dezvoltarea aplicaiei utiliznd OLEDB


Pentru a avea acces uor la obiectele OLEDB este necesar importarea spaiului de nume
OleDb:
using System.Data.OleDb;

Pentru dezvoltarea aplicaiei sunt necesare:


String string_conectare = "Provider=Microsoft.ACE.OLEDB.12.0; Data source=" +
Application.StartupPath + "\\studenti.accdb;User ID=Admin;Password=;";
string sql = "SELECT * FROM Studenti";
OleDbConnection conexiune;
OleDbCommand comanda;
OleDbDataAdapter adaptor;
OleDbCommandBuilder construire_comenzi;
DataTable dt;

Obiectul de tip OleDbConnection, permite conectarea la baza de date prin intermediul stringului de conectare:
3

Laborator 5 MTP

conexiune = new OleDbConnection(string_conectare);


conexiune.Open();

Obiectul de tip OleDbCommand permite efectuarea unei interogri asupra bazei de date, dar
i executarea unor comenzi SQL NonQuery cum ar fi INSERT, UPDATE, DELETE etc.:
comanda = new OleDbCommand(sql, conexiune);

Un DataSet reprezint o copie n memorie a datelor extrase dintr-o surs de date. Un


DataSet const dintr-o colecie de tabele (DataTable), un tabel dintr-o colecie de nregistrri
(DataRow), iar o nregistrare dintr-o colecie de cmpuri sau coloane (DataColumn).
dt = new DataTable();

Clasa OleDbAdapter reprezint adaptorul de servicii utilizate pentru a efectua interogri


asupra surselor de date OLEDB. OleDbAdapter reprezint o punte ntre un DataTable sau
DataSet i o surs de date (cum ar fi o tabel a unei baze de date) pentru extragerea datelor
i salvarea lor. Adaptorul furnizeaz aceast punte prin utilizarea metodei Fill pentru a
ncrca datele din sursa de date (tabela) ntr-un DataTable, respectiv Update pentru a trimite
schimbrile fcute n DataTable napoi n sursa de date.
adaptor = new OleDbDataAdapter(comanda);
adaptor.Fill(dt);

Un obiect OleDbCommandBuilder genereaz automat comenzile necesare pentru ca schimbrile fcute ntr-un tabel DataTable (sau ntr-un DataSet) s se reflecte i n baza de date
din care a fost ncrcat DataTable-ul (DataSet-ul). Pentru ca un adaptor sa poat aplica
schimbrile fcute ntr-un DataTable (sau DataSet) asupra bazei de date (metoda Update),
este necesar asocierea lui cu un obiect OleDbCommandBuilder. Asocierea dintre obiectul
OleDbCommandBuilder i adaptor se poate face prin intermediul constructorului:
construire_comenzi = new OleDbCommandBuilder(adaptor);

n continuare urmeaz specificarea sursei de date a obiectului BindingSource, realizarea


legturii dintre controale din formular i BindingSource, precum i dintre BindingNavigator i
BindingSource.
BindingSource1.DataSource = dt;
BindingSource1.Position = 0;
// legarea proprietii Text a casutei txtMatricol la campul Nr_matricol
txtMatricol.DataBindings.Add(new Binding("Text",BindingSource1,"Nr_matricol",true));
// in mod similar se va proceda si cu celelalte controale...
BindingNavigator1.BindingSource = BindingSource1;

Pn n acest punct aplicaia va permite vizualizarea nregistrrilor din baza de date i


navigarea printre aceste nregistrri.
Aplicaia va avea 2 stri de funcionare, care vor fi implementate n continuare:

prima stare, n care se va putea naviga printre nregistrrile din baza de date, acestea
putnd fi doar vizualizate nu i modificate. Butonul de Adugare va fi activ, iar cele
de Salvare i Renunare vor fi inactive. Butoanele Editare, tergere i Cutare vor fi
active doar dac exist nregistrri n baza de date. (Figura 4a)

a doua stare se instaureaz atunci cnd se apas Adugare sau Editare. Se vor
dezactiva controalele de navigare i comenzile Adugare, Editare, tergere, Cutare,
singurele aciuni posibile fiind Salvare sau Renunare (Figura 4b).

Media notelor studentului curent va fi afiat n partea dreapt a formularului.

Lucrul cu baze de date n Visual C#

(a)

(b)
Figura 4. Starea 1 (a), respectiv starea 2 (b)

n continuare se vor implementa funcionalitile controalelor Adugare, Editare, tergere,


Cutare, Salvare i Renunare:

Adugare butonul de adugare poate s rmn cel implicit al obiectului


BindingNavigator, sau se poate crea un buton nou. La apsarea butonului adugare
se va trece din starea 1 n starea 2.

Editare singura aciune care se va petrece la editare va fi cea de trecere din starea
1 n starea 2.

tergerea nu va fi realizat fr o confirmare suplimentar, precum cea din Figura 5.


Pentru a putea implementa aceasta funcionalitate se va selecta componenta
BindingNavigator1 i i se va seta proprietatea DeleteItem pe valoarea (none).
tergerea se poate realiza prin comanda de mai jos i va fi urmat de salvare:

BindingSource1.RemoveCurrent();

Figura 5. Confirmarea tergerii

Salvarea va presupune trecerea din Starea 2 n Starea 1 i actualizarea modificrilor


fcute n DataTable, n tabela considerat:

BindingSource1.EndEdit();
adaptor.Update(dt);

Renunarea presupune trecerea din Starea 2 n Starea 1 i anularea modificrilor


realizate n BindingSource:

BindingSource1.CancelEdit();

Laborator 5 MTP

n continuare se va implementa fereastra pentru cutarea unui student (Figura 6). Aici,
controlul ComboBox corespunztor numelui cmpului va fi completat prin cod cu numele
tuturor cmpurilor din tabelul Studenti.

Figura 6. Cutarea dup un cmp

Figura 7. Valori luate de cele dou controale ComboBox n vederea efecturii unei cutri

Fereastra va conine un control DataGridView, care iniial va afia toate nregistrrile din
baza de date. n urma apsrii butonului Afiare se vor afia n DataGridView doar
nregistrrile care respect condiiile precizate (cmp = valoare sau cmp like valoare).
Pentru ncrcarea controlului DataGridView cu toate datele din tabela bazei de date se va
proceda n mod similar exemplului de mai sus cu meniunea c obiectele de tip
BindingNavigator, BindingSource i OleDbCommandBuilder nu mai sunt necesare.
Pentru ncrcarea datelor din DataTable n DataGridView se va proceda n felul urmtor:
DataGridView1.DataSource = dt;
DataGridView1.ReadOnly = true;

Iniial DataGridView va conine nregistrrile din ntreaga tabel. Interogarea SQL va fi


construit dinamic, astfel nct dac se apas butonul afiare i nu este introdus nimic n
cmpul pentru valoare, n DataGridView va fi afiat coninutul ntregii tabele, iar altfel se vor
afia n DataGridView doar nregistrrile filtrate prin interogare. n cazul n care interogarea
SQL nu este corect se va afia un mesaj de eroare, urmat de afiarea comenzii n clar.
Pentru aceasta se va folosi blocul trycatch.

Lucrul cu baze de date n Visual C#

Sfaturi utile
1. Pentru a asigura comutarea ntre cele dou stri complementare se
recomand crearea unei funcii de dezactivare/activare a controalelor, care
are ca i parametru o variabil boolean, corespunztoare strii.
2. Pentru includerea unei confirmri suplimentare la operaia de tergere, se
recomand renunarea la aciunea implicit pe care o are butonul de tergere
n cadrul BindingNavigator-ului i editarea manual a codului necesar
tergerii.
3. n fereastra de cutare, pentru completarea numelor tuturor cmpurilor din
tabelul Studenti n controlul ComboBox se recomand parcurgerea prin
intermediul unei bucle foreach a tuturor coloanelor din tabelul creat i
adugarea prin cod a denumirilor acestora.
4. Se recomand transmiterea obiectului dt din fereastra principala ctre
fereastra de cutare prin constructorul acesteia.

Salvarea n tabel a modificrilor fcute se poate realiza i fr utilizarea unui obiect


OleDbCommandBuilder i a metodei Update a adaptorului, prin construirea dinamic a
comenzii SQL (INSERT, DELETE, UPDATE) i executarea ei, la fel ca n exemplul de mai jos:
// se construieste interogarea insert, update, sau delete
command.CommandText = sql
command.ExecuteNonQuery()

Cu ce ne-am ales?
Prin aplicaia dezvoltat am nvat s realizm aplicaii desktop pentru lucrul cu
baze de date i s implementm principalele operaii care apar n aplicaiile cu
baze de date: adugare, modificare, tergere sau cutare. Aplicaiile cu baze de
date sunt utile i necesare n toate domeniile. Aplicaia dezvoltat opereaz asupra
unei baze de date Access dar tehnologia OLEDB poate fi aplicat i altor baze de
date precum Oracle, Microsoft SQL Server, MySQL etc.

Bibliografie
[1] Visual C# Resources, http://msdn.microsoft.com/enus/vstudio/hh341490%28v=msdn.10%29.aspx

You might also like