laborator5_mtp

Upload: egzistens

Post on 28-Feb-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Laborator5_MTP

    1/7

    1

    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 datelorstudenilor, date care sunt stocate ntr-o baz de date Microsoft Access (Figura 1).

    Figura 1. Fereastraprincipal a aplicaiei.

    Mai pe larg, vom proceda astfel

    Primul pas n realizarea acestei aplicaii este crearea bazei de date propriu-zise. Pentruaceasta, se va deschide aplicaia Microsoft Access i se va crea o baz de date goal (Blankdesktop database) care va fi salvat ndirectorulbin\Debugal proiectului.

    Odat creat baza de date, comutai vizualizarea pe Design view i construii structuratabelului, adugnd cmpurile ce se pot vedea n Figura 2. Cmpul Nr_matricol va fi alescheie primar (click dreapta pe numele cmpului Primary key). Un cmp sau un set decmpuri de tip cheie primar identific n mod unic fiecare nregistrare din tabel. Odatdeclarat cheie primar, un cmp nu poate conine duplicate sau valori NULL. Se aleg cheiprimare cmpuri de tipAutoNumber(cmpuri numerice cu auto-incrementare), cmpuri decare 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.

  • 7/25/2019 Laborator5_MTP

    2/7

    Laborator 5 MTP

    2

    Dup ce au fost introduse i stabilite proprietile cmpurilor, se va salva tabelul cu numeleStudenti 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 nufolosii 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 Applicationcare vaconine 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 uneltecare va permite navigarea printre nregistrrile din baza de date i apelarea rapid aaciunilor 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, 12controale dup cum urmeaz:

  • 7/25/2019 Laborator5_MTP

    3/7

    Lucrul cu baze de date n Visual C#

    3

    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_studiui 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 BindingNavigatorv pune la dispoziie comenzi pentru parcurgerea nregistrrilordin baza de date. Obiectele de tip BindingSourcencapsuleaz datele din baza de date la carev 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 cubaze de date se poate realiza utiliznd tehnologiile OLEDB sau ADO.

    OLEDB (Object Linking and Embedding, Database) este un set de interfee proiectat deMicrosoft pentru accesarea a diferite tipuri de date stocate ntr-o manier uniform. A fostproiectat 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 aplicaiacare are nevoie s le acceseze. OLEDB este divizat la nivel conce ptual ntre consumatori ifurnizori. Consumatorii sunt aplicaiile care au nevoie s acceseze datele iar furnizorul estecomponenta software care implementeaz interfaa i drept urmare care red dateleconsumatorului.

    ADO(ActiveX Data Objects) reprezint un set de obiecte utilizate pentru accesarea surselorde 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 esteimplementat baza de date. Sunt necesare cunotine privind baza de date doar pentruconectare. Nu sunt necesare cunotine de SQL pentru a accesa baza de date, dei se poatefolosi ADO pentru a executa comenzi SQL.

    ADO este bazat pe OLEDB, cele dou nu sunt separate, nu sunt tehn ologii distincte. OLEDB,fiind la un nivel mai jos dect ADO, este mai rapid. ADO prezint un subset din capabilit ileOLEDB i abstractizeaz mult din funcionarea OLEDB.

    Dezvoltarea aplicaiei utiliznd OLEDB

    Pentru a avea acces uor la obiectele OLEDB este necesar importarea spaiului de numeOleDb: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 strin-gului de conectare:

  • 7/25/2019 Laborator5_MTP

    4/7

    Laborator 5 MTP

    4

    conexiune = new OleDbConnection(string_conectare);conexiune.Open();

    Obiectul de tip OleDbCommandpermite efectuarea unei interogri asupra bazei de date, dari 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. UnDataSetconst 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 interogriasupra surselor de date OLEDB. OleDbAdapter reprezint o punte ntre un DataTable sauDataSeti o surs de date (cum ar fi o tabel a unei baze de date) pentru extragerea datelori salvarea lor. Adaptorul furnizeaz aceast punte prin utilizarea metodei Fill pentru a

    ncrca datele din sursa de date (tabela) ntr-un DataTable, respectiv Updatepentru a trimiteschimbrile fcute n DataTablenapoi n sursa de date.

    adaptor = new OleDbDataAdapter(comanda);adaptor.Fill(dt);

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

    n continuare urmeaz specificarea sursei de date a obiectului BindingSource, realizarealegturii dintre controale din formular i BindingSource, precum i dintre BindingNavigatori

    BindingSource.BindingSource1.DataSource = dt;BindingSource1.Position = 0;

    // legarea proprietii Text a casutei txtMatricol la campul Nr_matricoltxtMatricol.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 inavigarea 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, acesteaputnd fi doar vizualizate nu i modificate. Butonul de Adugareva fi activ, iar celede Salvare i Renunare vor fi inactive. Butoanele Editare, tergere i Cutare vor fiactive doar dac exist nregistrri n baza de date. (Figura 4a)

    a doua stare se instaureaz atunci cnd se apas Adugare sau Editare. Se vordezactiva 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.

  • 7/25/2019 Laborator5_MTP

    5/7

    Lucrul cu baze de date n Visual C#

    5

    (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 obiectuluiBindingNavigator, sau se poate crea un buton nou. La apsarea butonului adugarese va trece din starea 1 n starea 2.

    Editaresingura aciune care se va petrece la editare va fi cea de trecere din starea1 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 componentaBindingNavigator1 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 modificrilorfcute n DataTable, n tabela considerat:

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

    Renunarea presupune trecerea din Starea 2 n Starea 1 i anularea modificrilorrealizate n BindingSource:

    BindingSource1.CancelEdit();

  • 7/25/2019 Laborator5_MTP

    6/7

    Laborator 5 MTP

    6

    n continuare se va implementa fereastra pentru cutarea unui student (Figura 6). Aici,controlul ComboBox corespunztor numelui cmpului va fi completat prin cod cu numeletuturor 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 dinbaza 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 ncrcareacontrolului DataGridViewcu toate datele din tabela bazei de date se vaproceda n mod similar exemplului de mai sus cu meniunea c obiectele de tipBindingNavigator, BindingSourcei OleDbCommandBuildernu mai sunt necesare.

    Pentru ncrcarea datelor din DataTablen DataGridViewse va proceda n felul urmtor:

    DataGridView1.DataSource = dt;DataGridView1.ReadOnly = true;

    Iniial DataGridView va conine nregistrrile din ntreaga tabel. Interogarea SQL va ficonstruit dinamic, astfel nct dac se apas butonul afiare i nu este introdus nimic ncmpul pentru valoare, n DataGridViewva fi afiat coninutul ntregii tabele, iar altfel se vorafia n DataGridViewdoar nregistrrile filtrate prin interogare. n cazul n care interogareaSQL nu este corect se va afia un mesaj de eroare, urmat de afiarea comenzii n clar.Pentru aceasta se va folosi blocul trycatch.

  • 7/25/2019 Laborator5_MTP

    7/7

    Lucrul cu baze de date n Visual C#

    7

    Sfaturi utile

    1.

    Pentru a asigura comutarea ntre cele dou stri complementare serecomand crearea unei funcii de dezactivare/activare a controalelor, careare ca i parametru o variabil boolean, corespunztoare strii.

    2.

    Pentru includerea unei confirmri suplimentare la operaia de tergere, serecomand renunarea la aciunea implicit pe care o are butonul de tergeren cadrul BindingNavigator-ului i editarea manual a codului necesartergerii.

    3.

    n fereastra de cutare, pentru completarea numelor tuturor cmpurilor dintabelul Studenti n controlul ComboBox se recomand parcurgerea prinintermediul unei bucle foreacha tuturor coloanelor din tabelul creat iadugarea prin cod a denumirilor acestora.

    4.

    Se recomandtransmiterea obiectului dt din fereastra principala ctrefereastra de cutare prin constructorul acesteia.

    Salvarea n tabel a modificrilor fcute se poate realiza i fr utilizarea unui obiectOleDbCommandBuilder i a metodei Update a adaptorului, prin construirea dinamic acomenzii SQL (INSERT, DELETE, UPDATE) i executarea ei, la fel ca n exemplul de mai jos:// se construieste interogarea insert, update, sau deletecommand.CommandText = sqlcommand.ExecuteNonQuery()

    Cu ce ne-am ales?

    Prin aplicaia dezvoltat am nvat s realizm aplicaii desktop pentru lucrul cu

    baze de date is implementm principalele operaii care apar n aplicaiile cubaze de date: adugare, modificare, tergere sau cutare. Aplicaiile cu baze dedate sunt utile i necesare n toate domeniile. Aplicaia dezvoltat opereaz asupraunei baze de date Access dar tehnologia OLEDB poate fi aplicat i altor baze dedate precum Oracle, Microsoft SQL Server, MySQL etc.

    Bibliografie

    [1] Visual C# Resources,http://msdn.microsoft.com/en-

    us/vstudio/hh341490%28v=msdn.10%29.aspx

    http://msdn.microsoft.com/en-us/vstudio/hh341490%28v=msdn.10%29.aspxhttp://msdn.microsoft.com/en-us/vstudio/hh341490%28v=msdn.10%29.aspxhttp://msdn.microsoft.com/en-us/vstudio/hh341490%28v=msdn.10%29.aspxhttp://msdn.microsoft.com/en-us/vstudio/hh341490%28v=msdn.10%29.aspxhttp://msdn.microsoft.com/en-us/vstudio/hh341490%28v=msdn.10%29.aspxhttp://msdn.microsoft.com/en-us/vstudio/hh341490%28v=msdn.10%29.aspx