07 VB2008 Baze de Date

24
Introducere în Visual Studio .Net 1 7. Baze de date Controalele de baze de date din Visual Basic permit utilizatorului să interacţioneze cu aplicaţia, aceasta afişând date către utilizator, iar mediul de programare controlând aplicaţia. Controalele aduc datele din baza de date către aplicaţie, permiţând acesteia să trimită înapoi date către baza de date. Programarea cu baze de date este un subiect vast, greu de acoperit într-un singur capitol. Acest capitol îşi propune explicarea modului de lucru cu bazele de date şi descrierea unor controale şi obiecte utile oferite de Visual Basic pentru lucrul cu bazele de date. 7.1. Conectarea automată la baza de date Visual Studio 2008 oferă controale şi unelte care fac ușoară conectarea la baza de date. Pentru a construi un program simplu cu baze de date, din meniul File selectăm o nouă aplicaţie. Apoi din meniul Data-> Add New Data Source care va afișa un dialog pentru configurarea conectării la baza de date, așa cum este arătat în Figura 7.1. Visual Studio 2008 permite utilizarea bazelor de date, a serviciilor web şi a obiectelor în aplicaţia noastră. Cea ce vom selecta noi în continuare, pentru a prelua datele şi baza de date este opţiunea Database, după care vom apăsa butonul Next, urmând să apară dialogul din Figura 7.2. Figura 7.1. Dialogul Data Source Configuration Wizard

Transcript of 07 VB2008 Baze de Date

Page 1: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

1

7. Baze de date

Controalele de baze de date din Visual Basic permit utilizatorului să interacţioneze cu aplicaţia, aceasta afişând date către utilizator, iar mediul de programare controlând aplicaţia. Controalele aduc datele din baza de date către aplicaţie, permiţând acesteia să trimită înapoi date către baza de date.

Programarea cu baze de date este un subiect vast, greu de acoperit într-un singur capitol. Acest capitol îşi propune explicarea modului de lucru cu bazele de date şi descrierea unor controale şi obiecte utile oferite de Visual Basic pentru lucrul cu bazele de date.

7.1. Conectarea automată la baza de date

Visual Studio 2008 oferă controale şi unelte care fac ușoară conectarea la baza de date. Pentru a construi un program simplu cu baze de date, din meniul File selectăm o nouă aplicaţie. Apoi din meniul Data-> Add New Data Source care va afișa un dialog pentru configurarea conectării la baza de date, așa cum este arătat în Figura 7.1.

Visual Studio 2008 permite utilizarea bazelor de date, a serviciilor web şi a obiectelor în aplicaţia noastră. Cea ce vom selecta noi în continuare, pentru a prelua datele şi baza de date este opţiunea Database, după care vom apăsa butonul Next, urmând să apară dialogul din Figura 7.2.

Figura 7.1. Dialogul Data Source Configuration Wizard

Page 2: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

2

Figura 7.2. Alegeţi o conexiune la o bază de date sau creaţi una nouă.

Dacă anterior am creat o legătura la baza de date, putem să o selectăm din lista dropdown. În caz ca dorim să creăm o noua conexiune, apăsăm butonul New Connection pentru apariţia dialogului din Figura 7.3.

Figura 7.3. Fereastra Add Connection dialog pentru a crea o noua conexiune la baza de date.

Dacă baza noastră de date este în alt format decât cel implicit (în acest exemplu Microsoft Access Database), atunci apăsăm butonul Change pentru a apărea o fereastră de dialog (Figura 7.4) din care putem selecta unul din tipurile de baze de date existente, cum ar fi Microsoft Access, ODBC, SQL Server sau Oracle.

Page 3: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

3

Figura 7.4. Dialogul pentru selectarea tipului de bază de date.

După ce am selectat tipul de bază de date dorit, închidem această fereastră pentru a ne întoarce în fereastra Add Connection. În funcţie de tipul selectat, fereastra Add Connection se va schimba. Spre exemplu, în Figura 7.5 este prezentat cazul în care baza de date este SQL Server.

Figura 7.5. Fereastra Add Connection pentru bazele de date SQL Server.

Pentru baza de date Microsoft Access trebuie să introducem numele fișierului sau să apăsăm butonul Browse (vezi Figura 7.3) pentru a găsi fișierul cu baza de date. Dacă este necesar, mai introducem şi numele şi parola apoi click pe butonul OK.

La întoarcerea în fereastra Data Source Configuration Wizard, selectăm noua legătură așa cum este prezentat în Figura 7.6. Dacă dam click pe semnul „+” situat lângă eticheta “Connection String”, atunci vom avea posibilitatea de vizualizare a informaţiilor despre conectarea la baza noastră de date.

La pasul următor, vom fi informaţi că baza noastră de date este locală şi vom fi întrebaţi dacă vrem să o adăugăm la proiectul nostru. Dacă selectăm Yes, baza de date va fi inclusă în proiect şi va apărea în fereastra Project Explorer. Dacă dorim să distribuim baza de date împreună cu aplicaţia noastră, este mai convenabil să gestionăm baza de date şi codul Visual Basic împreună.

Page 4: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

4

În continuare vom fi întrebaţi dacă dorim să salvăm informaţiile despre conectare în fişierul de configurare a aplicaţiei noastre. Dacă lăsăm selectată această opţiune atunci aceste informaţii vor fi adăugate în fişierul app.config. (Figura 7.7)

Figura 7.6.

Figura 7.7.

Mai jos este prezentată o parte din fişierul app.config unde sunt stocate informaţiile despre conectarea la baza de date.

<connectionStrings> <add name=”SimpleDBApp.Settings.ClassRecordsConnec tionString” connectionString=”Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=|DataDirectory|\ClassRecords.mdb” providerName=”System.Data.OleDb” /> </connectionStrings>

Page 5: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

5

Fereastra următoare conţine informaţii despre obiectele din baza de date. În acest exemplu, baza de date conţine două tabele, şi anume Student şi TestScore. Prin apăsarea semnului „+” de lângă obiecte, le putem expanda pentru a vedea ce câmpuri conţin. (vezi Figura 7.8)

Figura 7.8. Selectarea obiectelor pe care dorim să le includem în DataSource.

În Figura 7.8, ambele tabele sunt selectate.

Când selectăm Finish sunt adăugate câteva obiecte la aplicaţia noastră. Fereastra Solution Explorer (Figura 7.9) afişează 2 obiecte şi anume baza de date ClassRecords.mdb şi fişierul ClassRecordsDataSet.xsd care descrie sursa de date.

Figura 7.9.

Dacă dam dublu click pe fişierul *.xsd, Visual Basic va deschide un editor (Figura 7.10) care va afișa tabele definite şi câmpurile lor.

Page 6: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

6

Figura 7.10. Tabele definite şi relaţia dintre ele.

Linia trasată între cele 2 obiecte, având o cheie în partea stângă şi simbolul “infinit” în partea dreapta, indică faptul ca relaţia dintre tabele este de “one-to-many ”. În acest exemplu, câmpul StudentID din tabelul Students împreună cu câmpul StudentID din tabelul TestScores formează o relaţie “foreign key”. Aceasta înseamnă că fiecare valoare StudentID din tabelul TestScores trebuie să corespundă unei valori StudentID din tabelul Students. Dacă se efectuează dublu click pe link-ul de relaţionare (sau click dreapta), editorul va afișa fereastra din Figura 7.11

Figura 7.11. Fereastra de dialog pentru editarea relaţiilor dintre tabele

Page 7: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

7

În partea de jos a tabelelor afişate în Figura 7.10, se pot observa doua obiecte data adapter

care conţin etichetele “Fill,GetData()” . Acestea obiecte vor fi folosite mai târziu în aplicaţie pentru a muta datele din / în data source .

În plus, wizard-ul a adăugat în fereastra Solution Explorer un nou obiect DataSet, în fereastra Data Sorces (vezi Figura 7.12). Dacă fereastra Data Sources nu este vizibilă, se poate selecta din meniu Data->Show Data Sources.

Se poate observa semnul „+” acolo unde există posibilitatea de expandare a obiectelor conţinute în DataSet. În Figura 7.12 este dataset-ul este expandat pentru a face vizibile tabele, acestea la rândul lor fiind expandate pentru a se vedea câmpurile. Se poate observa ca tabelul TestScores este listat sub tabelul Students, deoarece există o relaţie “părinte-copil“ între cele două.

Este nevoie de multe cuvinte şi figuri pentru descrierea acestui proces, dar utilizând wizard-ul aceasta operaţiune devine foarte rapidă. După ce am creat sursa de date (Data Source), putem construi o interfaţă simplă fără nici un efort. Trebuie doar să efectuam “drag–and–drop” cu obiectele din fereastra Data Sources pe formularul nostru.

Figura 7.12. Fereastra Data Sources.

Dacă facem click şi “drag and drop” cu un tabel din fereastra Data Sources pe un formular, Visual Basic creează automat controalele BindingNavigator şi DataGridView, precum şi alte componente pentru a afişa datele din tabel (vezi Figura 7.13)

Figura 7.13. Drag and drop un tabel din fereastra Data Souces are ca efect crearea unui DataGrid simplu

În loc să afişăm tot tabelul pe formular, putem să facem “drag and drop” doar cu anumite coloane. În acest caz, Visual Basic adaugă controale pe formular pentru a reprezenta coloanele. În figura 7.14 se pot observa coloanele din tabelul Students pe interfaţă.

Dacă selectăm un tabel din fereastra Data Sources va apărea un meniu drop down în partea dreapta. Acest meniu ne oferă posibilitatea de a alege stiluri diferite de afişare, aşa cum este în Figura 7.15. De exemplu, dacă setam stilul de afişare la Details şi apoi facem drag and drop

Page 8: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

8

cu tabelul pe interfaţa noastră, Visual Basic va afişa datele din tabel utilizând o afişare similară celei din figura 7.14 în loc de DataGrid-ul din Figura 7.13.

Figura 7.14. Afişare în stil Details a datelor din tabel

Figura 7.15. Meniul drop down obţinut în urma efectuării click dreapta pe tabel

Similar se poate schimba modul de afişare pentru orice coloana din tabelul nostru. Se selectează o coloană din fereastra Data Sources iar din meniul drop down obţinut prin click dreapta putem afişa informaţia într-un textbox, label, link label, combobox, sau orice alt control. Acum, când trageţi coloana pe un formular sau când trageţi tabelul pe formular pentru a construi o vizualizare a înregistrărilor, Visual Basic utilizează acest tip de control pentru afişarea valorilor coloanei.

7.2. Obiecte create automat

Când se efectuează drag and drop asupra unui tabel sau a unei coloane din fereastra Data Sources pe o interfaţă, Visual Basic face mai mult decât să plaseze un control DataGridView pe interfaţă. El creează de asemenea, o mulţime de alte controale şi componente. Dintre acestea cele mai importante sunt DataSet, TableAdapter, BindingSource şi BindingNavigator (vezi Figura 7.16)

Page 9: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

9

Figura 7.16. Visual Basic foloseşte componentele DataSet, TableAdapter, TableAdapterManager,

BindingSource, şi BindingNavigator pentru a afişa un DataGridView .

Programul stochează datele într-un obiect DataSet. Un singur obiect DataSet reprezintă o întreagă bază de date. Acesta conţine obiecte de tip DataTable unde sunt reprezentate tabelele din baza de date. Fiecare obiect DataTable conţine obiecte DataRow care reprezintă înregistrările din baza de date, fiecare obiect DataRow conţine elemente în care reprezintă coloanele pentru fiecare înregistrare.

Obiectele de tip TableAdapter sunt utilizate pentru comunicaţia dintre aplicaţie (mai precis, un obiect DataSet) şi o bază de date. Acestea oferă metode pentru efectuarea operaţiilor asupra bazei de date (cum ar fi selectare, inserare, modificare sau ştergere). Un TableAdapter se conectează la o bază de date, execută interogări SQL sau proceduri stocate şi fie returnează un tabel nou populat cu datele returnate, fie umple un obiect DataTable existent cu datele returnate. Obiectele TableAdapter sunt utilizate de asemenea pentru a trimite date actualizate de la aplicaţia curentă înapoi la baza de date.

TableAdapterManager reprezintă o componentă nouă în Visual Studio 2008 care oferă funcţii de salvare a datelor în tabele relaţionate. TableAdapterManager utilizează relaţiile de tip foreign-key care relaţionează tabelele pentru determinarea ordinii corecte de trimitere a comenzilor Insert, Update sau Delete de la un dataset către o bază de date fără încălcarea regulilor definite prin intermediul foreign-key-urilor din baza da date.

Obiectul BindingSource încapsulează toate datele din DataSet şi oferă funcţii pentru controlul acestora din cadrul programului. Aceste funcţii efectuează acţiuni cum ar fi mutarea datelor, adăugare sau ştergerea elementelor, etc.

BindingNavigator oferă o interfaţă grafică pentru ca utilizatorul să poată controla BindingSource.

Figura 7.17 arată legăturile dintre obiectele DataSet, TableAdapter, BindingSource, şi BindingNavigator.

Page 10: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

10

Figura 7.17. Visual Basic folosește obiecte DataSet, TableAdapter, BindingSource, şi BindingNavigator

pentru afişarea informaţiilor.

Chiar şi aceste obiecte, lucrând împreună nu fac totul pentru ca informaţiile să fie afişate de program. Când creează aceste obiecte, Visual Basic adaugă de asemenea următorul cod la interfaţa noastră. Event handler-ur Form1_Load face ca TableAdapter-ul să copieze toate datele din baza de date în DataSet.

Procedura bindingNavigatorSaveItem_Click se execută în momentul când utilizatorul face click pe opţiunea Save a BindingNavigator-ului. Această rutină face ca TableAdapter-ul să salveze orice modificare a tabelului Students în baza de date.

Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Obje ct, _ ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: This line of code loads data into the 'ClassRecordsDataSet.Students' 'table. You can move, or remove it, as needed. Me.StudentsTableAdapter.Fill(Me.ClassRecordsDataSe t.Students) End Sub Private Sub StudentsBindingNavigatorSaveItem_Click (ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles StudentsBindi ngNavigatorSaveItem.Click Me.Validate() Me.StudentsBindingSource.EndEdit() Me.StudentsTableAdapter.Update(Me.ClassRecordsData Set.Students) End Sub End Class

Visual Basic creează toate acestea automat, iar dacă rulăm programul vom vedea toate informaţiile din baza de date afişate, având posibilitatea de a le manipula. Totuși nu este perfect, în sensul ca nu există nici o validare a datelor, lăsând utilizatorul să închidă aplicaţia fără să salveze modificările făcute în baza de date. Este totuși un început bun, pentru atât de puţină muncă depusă.

7.3. Alte obiecte pentru lucrul cu baze de date

Dacă dorim un program care să afișeze şi să modifice datele din baza de date, cel descris anterior este destul de bun. În acest caz, lăsăm Visual Studio să facă majoritatea muncii, utilizatorul nefiind nevoit să aprofundeze detaliile lucrului cu baze de date. De asemenea, utilizatorul poate folosi obiecte similare cu cele create de Visual Basic pentru a-şi construi propriile aplicaţii. Pe de alta parte, putem crea propriile noastre DataSet, TableAdapter, BindingSource, şi BindingNavigator pentru lucrul cu baze de date.

Dacă este nevoie să manipulăm baza de date direct din cod, nu are sens să creăm toate aceste obiecte. Dacă, de exemplu dorim să modificam o înregistrare, nu are sens să creăm obiecte DataGridView, BindingNavigator, şi BindingSource.

Page 11: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

11

Pentru cazuri ca acestea, Visual Basic pune la dispoziţie alte câteva tipuri de obiecte care pot fi folosite pentru a interacţiona cu baza de date. Aceste obiecte se împart în următoarele categorii :

• Containerele de date stochează datele după ce au fost încărcate din baza de date în aplicaţie, similare DataSet-urilor. Se pot lega controale la aceste obiecte pentru o afişare automată a datelor şi manipularea bazei de date.

• Conexiunile oferă informaţii care îi permit programului conectarea la o bază de date.

• Adaptoarele de date permit mutarea datelor între baza de date şi container-ul de date.

• Obiectele de tip Command oferă instrucţiuni pentru manipularea datelor. Un obiect de tip Command poate selecta, insera, modifica sau şterge datele din baza de date. De asemenea, poate executa proceduri stocate în baza de date.

Clasele de tip data container şi data adapter sunt generice şi lucrează cu diferite tipuri de baze de date, în timp ce diferite tipuri de obiecte de conexiuni şi comenzi sunt specifice unor tipuri diferite de baze de date. De exemplu, obiectele de conectare OleDbConnection, SqlConnection, OdbcConnection, şi OracleConnection pot lucra cu Object Linking and

Embedding Database (OLE DB); SQL Server, incluzând Microsoft Data Engine (MSDE); Open

Database Connectivity (ODBC); şi respectiv Oracle databases.

Obiectele SQL Server şi Oracle pot lucra doar cu baze de date care fac parte din același brand, dar ele sunt mai complete şi mai potrivite pentru baza de date SQL, respective Oracle.

7.4. O privire de ansamblu asupra datelor

O aplicaţie foloseşte trei obiecte de bază pentru a muta datele în şi din baza da date: o conexiune, un adaptor de date, şi un container de date cum ar fi DataSet. Obiectul de tip conexiune defineşte conexiunea la baza de date. Acesta conţine informaţii despre baza de date cum ar fi numele, locaţia, utilizatori şi parole pentru a accesa datele, informaţii despre provider-ul bazei de date.

Adaptorul de date defineşte o mapare de la baza de date la DataSet. Aceasta determină ce tip de date sunt selectate din baza de date, şi care coloane din baza de date vor fi mapate pe coloanele din DataSet.

Obiectele de tip DataSet stochează datele în interiorul aplicaţiei. Poate stoca unul sau mai multe tabele şi poate defini sau forţa relaţii între tabele. De exemplu, baza de date folosită anterior în acest capitol are un table TestScores care conţine un câmp StudentID. Valoarea din acest câmp trebuie să se regăsească în valorile din tabelul Students, câmpul StudentID. Aceasta este numită constrângere foreign key. DataSet-ul poate reprezenta această constrângere şi semnala o eroare dacă programul încearcă să creeze o înregistrare în tabelul TestScores cu o valoare a câmpului StudentID care nu apare în tabelul Students.

Odată iniţializată conexiunea, data adapter-ul şi DataSet-ul, programul poate apela metoda Fill() a data adapter-ului pentru a copia datele din baza de date în DataSet. Mai târziu se poate apela metoda Update() pentru a copia orice modificări ale înregistrărilor din DataSet înapoi în baza de date (Figura 7.18)

Page 12: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

12

Figura 7.18. O aplicaţie foloseşte conexiuni, adaptoare de date şi DataSet-uri pentru a muta datele în şi din

baza de date.

Dacă se compara Figura 7.18 cu Figura 7.17 se vor observa câteva similitudini. Ambele metode folosesc un adaptor pentru a tranzita datele între baza de date şi DataSet. La o primă privire ar părea că în Figura 7.17 nu se foloseşte un obiect conexiune, dar de fapt obiectul TableAdapter conţine intern un obiect conexiune pentru a accesa baza de date.

O diferenţă majoră este faptul că în Figura 7.17 se foloseşte un BindingSource şi un DataNavigator pentru a lăsa utilizatorul să controleze BindingSource şi a naviga între înregistrări.

7.5. Obiectele de tip Conexiune

Aceste obiecte sunt responsabile de conexiunile aplicaţiei la baza de date. Ele permit unui adaptor de date să mute datele în şi din DataSet.

Deși oferă aceleași proprietăţi la nivel primar, există câteva diferenţe între OleDbConnection,

SqlConnection, OdbcConnection, şi OracleConnection.

Unele obiecte de tip conexiune pot lucra cu mai mult de tipuri de baze de date. De exemplu, obiectul OleDbConnection poate lucra cu orice tip de bază de date care suportă conexiuni ODBC. În general conexiune care lucrează cu un tip specific de baze de date (cum ar fi SqlConnection sau OracleConnection) dau cea mai bună performanţă.

Tabele următoare descriu câteva dintre cele mai folosite proprietăţi puse la dispoziţie de clasele OleDbConnection şi SqlConnection.

Proprietate Scop

ConnectionString Stringul care defineşte conectarea la baza de date

ConnectionTimeout Timpul pe care obiectul îl așteaptă pentru a se conecta la baza de date. Dacă acesta expiră, se abandonează conectarea şi se semnalizează o eroare.

Database Returnează numele bazei de date curente.

DataSource Returnează numele bazei de date curente sau numele serverului.

Provider (Doar pentru OleDbConnection ) Returnează numele provider-ului de baza de date OLEDB (de exemplu “Microsoft.Jet.OLEDB.4.0”).

ServerVersion Returnează numărul versiunii serverului bazei de date. Valoarea este valabilă doar când conexiunea este deschisă şi are forma “04.00.0000.”

State Returnează starea conexiunii. Poate lua valoarea Closed, Connecting, Open, Executing (execută o comandă), Fetching, şi Broken (conexiunea a fost deschisă şi apoi întreruptă; se poate închide şi redeschide apoi conexiunea).

Page 13: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

13

Proprietatea ConnectionString include mai multe câmpuri separate prin punct şi virgule. Textul următor arata o valoare tipică a ConnectionString pentru o conexiune OleDbConnection care va accesa o bază de date Acces.

Jet OLEDB:Global Partial Bulk Ops=2; Jet OLEDB:Registry Path=; Jet OLEDB:Database Locking Mode=1; Data Source="C:\Personnel\Data\Personnel.mdb"; Mode=Share Deny None;Jet OLEDB:Engine Type=5; Provider="Microsoft.Jet.OLEDB.4.0"; Jet OLEDB:System database=; Jet OLEDB:SFP=False; persist security info=False; Extended Properties=; Jet OLEDB:Compact Without Replica Repair=False; Jet OLEDB:Encrypt Database=False; Jet OLEDB:Create System Database=False; Jet OLEDB:Don’t Copy Locale on Compact=False; User ID=Admin; Jet OLEDB:Global Bulk Transactions=1;

Multe dintre câmpurile separate prin punct şi virgule sunt opţionale şi pot fi omise. Să ne amintim care dintre ele sunt opţionale şi care nu poate fi dificil, dar din fericire nu e necesar. În loc să compunem noi proprietatea ConnectionString, putem lăsa Visual Basic să o alcătuiască pentru noi. Pentru aceasta selectăm din meniul View -> Server Explorer (Figura 7.19)

Figura 7.19. Din fereastra Database Explorer se poate genera un string de conectare automat.

Click-ul dreapta pe elementul Database Connections şi selectarea opţiunii Add Connection va avea ca efect apariţia dialogului din Figura 7.20. Putem schimba tipul de baza de date prin folosirea butonului Change. Apoi introducem informaţiile necesare pentru a ne conecta la baza noastră de date. Pentru o bază de date Microsoft Access (OLE DB) trebuie să introducem numele bazei de date sau să apăsăm pe butonul Browse pentru a o localiza.

În fereastra Server Explorer facem click pe New Connection; se va deschide o fereastră de proprietăţi de unde putem selecta Connection String. Nu îi putem schimba valoarea, dar putem selecta această valoare pe care o putem copia la noi în cod care va arăta ca în secvenţa următoare.

Provider=Microsoft.Jet.OLEDB.4.0; Data Source=”C:\VB Prog Ref\JulyCTPSrc\Ch11\books.m db”

Page 14: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

14

Figura 7.20. Dialogul pentru configurarea unei noi conexiuni la o bază de date.

Următorul fragment de cod ilustrează crearea, deschiderea, folosirea şi închiderea unui obiect OleDbConnection.

Imports System.Data.OleDb Public Class Form1 Private Sub Form1_Load(ByVal sender As System.O bject, _ ByVal e As System.EventArgs) Handles MyBase.Lo ad ' Creeaza conexiunea. Dim conn As New OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0; " & _ "Data Source=""C:\VB Prog Ref\JulyCTPSrc\Ch 11\books.mdb"";") "Persist Security Info=True; " & _ "Jet OLEDB:Database Password=MyPassword") ' Deschide conexiunea. conn.Open() ' ... ' ... ' Inchide conexiunea. conn.Close() conn.Dispose() End Sub End Class

Tabele următoare descriu cele mai folosite metode propuse de clasele OleDbConnection şi SqlConnection .

Metoda Scop

BeginTransaction Începe o tranzacţie cu baza de date şi returnează un obiect de tip tranzacţie. O tranzacţie lasă programul să se asigure că toate comenzile dintr-o serie de comenzi sunt fie toate executate fie toate anulate.

ChangeDatabase Schimbă baza de date curentă.

Close Închide baza de date curentă.

CreateCommand Creează un obiect de tip comandă care poate executa unele acţiuni asupra bazei de date, cum ar fi selectarea de înregistrări, crearea de tabele, modificarea unor înregistrări, etc.

Open Deschide o conexiune cu valorile specificate în proprietatea ConnectionString

Cele mai utile evenimente ale obiectelor de tip conexiune sunt InfoMessage şi StateChange. Evenimentul InfoMessage apare când provider-ul de bază de date are de a face cu o avertizare sau un mesaj de informare. Programul poate citi mesajul şi în consecinţă poate

Page 15: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

15

efectua o acţiune sau pur şi simplu îl afișează utilizatorului. Evenimentul StateChange apare când se modifica starea conexiunii la baza de date.

Trebuie ţinut minte că folosirea unui obiect de tip conexiune ca în Figura 7.18 se bazează pe metodele Fill() şi Update() ale adaptorului şi nu pe Open() sau Close().

Fill() şi Update() deschid automat o conexiune, efectuează acţiunile şi apoi închid conexiunea aşa încât utilizatorul nu este nevoit să gestioneze conexiunile. De exemplu, când programul apelează Fill(), adaptorul deschide rapid o conexiune, copiază datele din baza de date în DataSet şi apoi închide conexiunea.

7.6. Data Adapter-urile

Un adaptor de date transferă datele între o conexiune şi un DataSet. Metodele cele mai importante ale acestui obiect sunt Fill() şi Update(), care mută datele în şi din DataSet. Un adaptor de date oferă de asemenea alte proprietăţi şi metode care pot fi folositoare. Următorul tabel descrie cele mai folositoare proprietăţi.

Proprietate Scop

DeleteCommand Obiectul de tip comandă pe care adaptorul de date îl foloseşte pentru a şterge înregistrări.

InsertCommand Obiectul de tip comandă pe care adaptorul de date îl foloseşte pentru a insera înregistrări.

SelectCommand Obiectul de tip comandă pe care adaptorul de date îl foloseşte pentru a selecta înregistrări.

TableMappings O colecţie de obiecte DataTableMapping care determină cum vor fi mapate tabelele din baza de date în DataSet. Fiecare obiect are o colecţie ColumnMappings care va determina cum vor fi mapate coloanele din tabele în tabelele din DataSet.

UpdateCommand Obiectul de tip comanda pe care data adaptorul îl foloseşte pentru a modifica înregistrări.

Exista mai multe posibilităţi de a crea obiecte de tip comandă. De exemplu, dacă folosim Data Adapter Configuration Wizard ca să construim adaptorul în timp real, atunci wizardul creează automat aceste obiecte. Putem selecta adaptorul şi expanda aceste obiecte în fereastra Properties, pentru a le vizualiza proprietăţile, inclusiv proprietatea CommandText.

Altă cale de a crea aceste comenzi este să folosim un obiect de tip CommandBuilder. Dacă ataşăm acest obiect adaptorului, acesta va folosi obiectul CommandBuilder pentru a genera comenzile de care are nevoie, în mod automat.

Următoarea secvenţă de cod arata cum un program poate asocia un obiect de tip OleDbCommandBuilder la un OleDbDataAdapter. Când se apelează metoda Update(), adaptorul foloseşte obiectul CommandBuilder, dacă este necesar, pentru a efectua comenzi de inserare, modificare sau ştergere asupra bazei de date. Linia Debug.WriteLine afişează textul comenzilor generate în mod automat.

Private Sub Form1_Load(ByVal sender As System.Objec t, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.BooksTableAdapter.Fill(Me.BooksDataSet.Book s) ' Ataseaza un command builder la adaptorul de d ate ' si afiseaza comenzile generate. Dim command_builder As New OleDbCommandBuilder( OleDbDataAdapter1) Debug.WriteLine(command_builder.GetDeleteComman d.CommandText)

Page 16: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

16

Debug.WriteLine(command_builder.GetInsertComman d.CommandText) Debug.WriteLine(command_builder.GetUpdateComman d.CommandText) End Sub

Textul următor afișează rezultatele obţinute; sintaxa Update() este distribuita pe două linii, dar este o singura linie în fereastra Output. Obiectul de tip CommandBuilder generează aceste comenzi pe baza sintaxei „SELECT Title, URL From Books ” care a fost încărcată în DataSet.

DELETE FROM Books WHERE ((Title = ?) AND ((? = 1 AN D URL IS NULL) OR (URL = ?))) INSERT INTO Books (Title, URL) VALUES (?, ?) UPDATE Books SET Title = ?, URL = ? WHERE ((Title = ?) AND ((? = 1 AND URL IS NULL) OR (URL = ?)))

Proprietatea TableMappings a adaptorului, permite modificarea felului în care adaptorul mapează datele din baza de date în DataSet. De exemplu, am putea face o copie a tabelului Employees din baza de date în DataSet, numita People. De obicei, nu este nevoie să schimbăm numele tabelului sau a coloanelor, totuși aceste schimbări se pot face interactiv în modul design mult mai ușor decât în cod, aşa ca de obicei aceste valori se vor lăsa neschimbate.

Pentru a crea un data adaptor în modul design, trebuie să deschidem un formular, selectăm din meniul Toolbox opţiunea Data şi apoi dublu click pe controlul DataAdapter (dacă nu apare controlul DataAdapter în ToolBox, atunci facem click dreapta pe ToolBox şi selectăm meniul Choose Items şi de acolo selectăm adaptorul dorit.)

Când creăm data adaptorul apare Data Adapter Configuration Wizard din Figura 7.21. Primul pas este similar celui descris anterior pentru configurarea unei noi conexiuni. Selectăm o conexiune deja existentă sau apăsăm butonul New Connection pentru una nouă.

Figura 7.21. Data Adapter Configuration Wizard ne ajuta să definim un adaptor nou.

La apăsarea butonului Next va apărea un dialog ca cel din Figura 7.22. De aici putem selecta metoda cu care adaptorul va opera asupra bazei de date, şi va determina cum datele vor fi selectate, inserate sau modificate în baza de date. Dacă selectăm opţiunea “Use SQL Statements”, atunci adaptorul va lucra cu instrucţiuni simple SQL. Dacă selectăm opţiunea “Create new stored procedures” adaptorul va genera noi proceduri în baza de date. Pentru ca wizardul să folosească proceduri deja create, selectăm opţiunea „Use existing stored procedures”.

Page 17: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

17

În Figura 7.22, prima opţiune este singura activă fiind unica disponibilă pentru un OleDbDataAdapter ataşat unei baze de date Access, aşa cum am folosit în acest exemplu.

Figura 7.22. Selectarea unei metode prin care adaptorul va opera asupra bazei de date

Dacă selectăm “Use SQL Statements” şi apăsăm butonul Next, va apărea dialogul din Figura 7.23. Dacă avem experienţă în lucrul cu interogările SQL, atunci putem preciza noi o sintaxă SELECT pe care adaptorul o va folosi când va selecta datele din baza de date. În caz contrar putem face Click pe butonul Query Builder (vezi Figura 7.24), apoi vom selecta tabelele din baza de date care conţin înregistrările pe care vrem să le folosim şi dam click pe butonul Add. În Figura 7.24 este afişat doar tabelul Book, deoarece baza de date conţine doar acest tabel. După ce am selectat tabelele, închidem dialogul „Add Table”. Se pot folosi coloanele din al doilea panou pentru a determina cum sunt sortate câmpurile. În al treilea panou este afişată sintaxa SQL pe care o construim; facem click pe butonul Execute Query pentru a rula sintaxa SQL şi a afişa rezultatele în partea de jos. Când am terminat, apăsăm tasta OK.

Figura 7.23. Generarea de sintaxa SELECT SQL

Page 18: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

18

Figura 7.24. Putem folosi interactiv Query Builder pentru a defini datele pe care le va folosi adaptorul.

Când apăsăm butonul Next, Data Adapter Configuration Wizard afisează un sumar similar celui din Figura 7.25. Acest sumar descrie acţiunile pe care wizard-ul le va executa şi pe cele pe care nu le va executa. În funcţie de query-ul pe care îl folosim pentru a selecta datele, wizard-ul s-ar putea să nu genereze toate comenzile de selectare, modificare, inserare sau ştergere a înregistrărilor. De exemplu, dacă query-ul unește mai multe tabele, wizard-ul nu va fi capabil să îşi dea seama cum să modifice înregistrările, aşa ca nu va genera comenzi de inserare, modificare sau ștergere.

Figura 7.25. Sumarul generat de Data Adapter Configuration Wizard

Page 19: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

19

Când apăsăm Finish, wizard-ul creează un nou adaptor şi un nou obiect de tip conexiune care va fi asociat adaptorului. Se vor seta proprietăţile DeleteCommand, InsertCommand, SelectCommand, şi UpdateCommand ale adaptorului în concordanţă cu conexiunea la baza de date pe care am selectat-o. De asemenea, se generează mapări iniţiale ale tabelelor pentru a transforma valorile din baza de date în valori pentru DataSet.

7.7. Obiecte de tip Command

Clasa obiectelor de tip Command (OleDbCommand, SqlCommand, OdbcCommand, şi OracleCommand) defineşte comenzile pentru baza de date. Comanda poate fi o interogare SQL, sau alte sintaxe care nu sunt interogări, cum ar fi INSERT, UPDATE, DELETE, sau CREATE TABLE.

Proprietatea Connection a obiectului furnizează conexiunea la baza de date pe baza cărora se vor executa comenzile. Proprietatea CommandText oferă textul SQL pe baza cărora se vor executa comenzile.

Proprietatea CommandType va stoca tipul comenzii conţinut de obiectul de tip Command. Aceasta poate fi StoredProcedure (CommandText este numele proceduri stocate), TableDirect (CommandText este numele a unui tabel sau mai multe din care vor fi furnizate datele) sau Text (sintaxa SQL).

În colecţia Parameters a obiectului de tip Command vor fi stocaţi parametri care vor defini orice valoare necesara pentru a executa comanda. De exemplu, codul următor creează un obiect de tip OleDbCommand care va executa sintaxa SQL “INSERT INTO PeopleNames

(FirstName, LastName) VALUES (?, ?)” . Semnele de întrebare marchează locul parametrilor care vor fi adăugaţi mai târziu. Apoi, în cod se vor adăuga doua obiecte noi de tip OleDbParameter la colecţia Parameters a comenzii. Când în cod se invoca metoda ExecuteNonQuery, adaptorul înlocuiește semnele de întrebare cu valorile parametrilor în ordinea în care apar în colecţia Parameters. În acest exemplu, valoare din txtFirstName.Text înlocuiește primul semn de întrebare, iar valoarea txtLastName.Text al doilea semn de întrebare.

Private Sub btnAdd_Click(ByVal sender As System.Obj ect, _ ByVal e As System.EventArgs) Handles btnAdd.Click ' Deschide conexiunea. Dim conn_people As New OleDbConnection(CONNECT_ STRING) conn_people.Open() ' Creeaza un obiect Command pentru a insera dat e. Dim cmd As New OleDbCommand( "INSERT INTO Peopl eNames(FirstName,LastName) " & _ "VALUES (?, ?) ", conn_people) ' Creeaza parametri pentru comanda. cmd.Parameters.Add(New OleDbParameter("FirstNam e", txtFirstName.Text)) cmd.Parameters.Add(New OleDbParameter("LastName ", txtLastName.Text)) ' Execut ă comanda. Try cmd.ExecuteNonQuery() Catch ex As Exception MessageBox.Show(ex.Message) End Try ' Afiseaza datele. ShowValues(conn_people)

Page 20: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

20

' Inchide conexiunea. conn_people.Close() conn_people.Dispose() End Sub

Obiectul de tip Command oferă 3 metode de a executa CommandText.

• ExecuteNonQuery() – execută o comandă care nu este un interogare şi care nu returnează nici o valoare.

• ExecuteScalar() – execută o comanda şi returnează prima coloană din prima înregistrare găsită. Este util atunci când se execută comenzi care returnează o singură valoare. (de exemplu “Select count * from Users ”).

• ExecuteReader() – execută o interogare SQL şi returnează obiectul de tip DataReader (de exemplu OleDbDataReader). Programul poate folosi acest obiect pentru a naviga printre înregistrările returnate.

Alte metode utile ale obiectului de tip Command sunt CreateParameter şi Prepare. Prima adaugă noi obiecte la colecţia Parameters a obiectului, iar cea de-a doua compilează comanda într-o formă în care va fi executată mai rapid de baza de date. De obicei e mai bine să se execute o comandă compilată cu parametri diferiţi, decât să se execute mai multe comenzi noi.

7.8. DataSet

DataSet este cel mai important obiect când vine vorba de a stoca datele în memorie. El oferă toate uneltele pentru a construi, încarcă, manipula şi salva date, într-un mod similar celui din baze de date relaţionate. Poate stoca tabele multiple, cu relaţii complexe părinte-copil şi chei de unicitate. Oferă metode pentru a face combina DataSet-uri, pentru căutare de înregistrări care satisfac o anumita condiţie, pentru salvarea datelor în modalităţi diferite (cum ar fi într-o bază de date relaţionată sau fişier XML). Din multe puncte de vedere, este ca o bază de date stocata în memorie şi nu pe disc.

Unul dintre cele mai răspândite moduri de a folosi un DataSet este să fie încărcat dintr-o bază de date relaţională, atunci când programul pornește, se vor folosi controale pentru a afişa înregistrările iar utilizatorul va putea manipula datele interactiv, iar la sfârșit, când programul îşi încheie execuţia se vor salva schimbările în baza de date.

Alte variante pot fi încărcarea datelor dintr-un XML sau construirea unui DataSet în memorie fără să folosim o bază de date. Programul poate folosi controale pentru a se conecta la DataSet iar utilizatorul va putea vizualiza şi manipula date complexe.

Codul următor creează şi iniţializează un DataSet de la început. Începe prin a crea un nou DataSet numit Scores. Apoi se creează un DataTable numit Students şi îl adăugă la colecţia de tabele a DataSet-ului.

Apoi, în cod se vor folosi coloanele DataTable-ului,se vor crea metode pentru a adăuga coloanele FirstName, LastName, şi StudentID la tabel. Se setează apoi pe True proprietatea Unique a coloanei StudentID, interzicându-se astfel duplicarea valorilor StudentID.

În cod se va crea apoi un şir de obiecte de tip DataColumn care vor conţine referinţele către coloanele FirstName şi LastName. Acest şir se va folosi pentru a se crea o constrângere UniqueConstraint şi apoi adăugată la colecţia Constraints a tabelului. Prin aceasta se asigură că fiecare pereche de FirstName/LastName este unică.

Page 21: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

21

Similar se va crea tabelul TestScores, cu coloanele StudentId, TestNumber şi Score, apoi se va adăugă o constrângere unică pe coloanele StudentID/TestNumber.

Apoi, în cod se va adăuga o relaţie între tabelele Students, coloana StudentID şi tabelul TestScores, coloana StudentID. Se vor adăuga apoi în mod aleator câteva înregistrări în cele două tabele.

În final, programul atașează la DataSet un DataGrid pentru a afişa rezultatele. Utilizatorul, poate folosi Datagrid-ul pentru a examina şi modifica datele, ca şi cum ar fi fost încărcate din baza de date.

Private Sub Form1_Load(ByVal sender As System.Objec t, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Creeaza DataSet-ul. Dim scores_dataset As New DataSet("Scores") ' Creeaza tabelul Students. Dim students_table As DataTable = scores_datase t.Tables.Add("Students") ' Adauga coloane la tabelul Students. students_table.Columns.Add("FirstName", GetType (String)) students_table.Columns.Add("LastName", GetType( String)) students_table.Columns.Add("StudentId", GetType (Integer)) ' Face campul StudentId unic. students_table.Columns("StudentId").Unique = Tr ue ' Face campul combinat FirstName/LastName unic. Dim first_last_columns() As DataColumn = { _ students_table.Columns("FirstName"), _ students_table.Columns("LastName")} students_table.Constraints.Add( _ New UniqueConstraint(first_last_columns)) ' Creeaza tabelul TestScores. Dim test_scores_table As DataTable = scores_dat aset.Tables.Add("TestScores") ' Adauga coloane la tabelul TestScores. Test_scores_table.Columns.Add("StudentId", GetT ype(Integer)) Test_scores_table.Columns.Add("TestNumber", Get Type(Integer)) Test_scores_table.Columns.Add("Score", GetType( Integer)) ' Face campul combinat StudentId/TestNumber uni c. Dim studentid_testnumber_score_columns() As Dat aColumn = { _ test_scores_table.Columns("StudentId"_ test_scores_table.Columns("TestNumber"_} test_scores_table.Constraints.Add( _ New UniqueConstraint(studentid_testnumber_scor e_columns)) ' Creeaza o relatie intre doua tabele prin camp ul StudentId. scores_dataset.Relations.Add( "Student Test Sco res"_ students_table.Columns("StudentId"), test_scor es_table.Columns("StudentId")) ' Adauga cateva date ale studentilor. students_table.Rows.Add(New Object() {"Art" "An t", 1}) students_table.Rows.Add(New Object() {"Bev", "B ug", 2}) students_table.Rows.Add(New Object() {"Cid" "Ca t", 3}) students_table.Rows.Add(New Object() {"Deb", "D ove", 4}) ' Creeaza cateva punctaje la test aleator. Dim score As New Random For id As Integer = 1 To 4 For test_num As Integer = 1 To 10 test_scores_table.Rows.Add( _ New Object() {id, test_num, score.Next (65, 100)}) Next test_num Next id

Page 22: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

22

' Ataseaza DataSet la DataGrid. grdScores.DataSource = scores_dataset End Sub

Următorul tabel descrie cele mai folositoare proprietăţi ale controlului DataSet.

Proprietate Scop

CaseSensitive Determina dacă string-urile de comparare din DataTable sunt case sensitive.

DataSetName Numele DataSet-ului. Dacă vom folosi reprezentarea XML, această proprietate va seta numele elementului rădăcină.

DefaultViewManager Returnează un obiect a DataViewManager pe care îl putem folosi pentru a seta proprietăţile of DataViews.

EnforceConstraints Determina dacă DataSet-ul ar trebui să forţeze constrângerile în timp ce modifica datele.

HasErrors Returns Returnează True dacă unul din DataTable are erori.

Prefix Determina prefixul XML pe care îl foloseşte DataSet-ul.

Relations O colecţie de obiecte de tip DataRelation care reprezintă relaţii părinte-copil dintre coloanele din diferite tabele.

Tables O colecţie de obiecte de tip DataTable care reprezintă tabelele stocate în DataSet.

Proprietatea XML a DataSet-ului afectează modul în care sunt citite şi scrise datele într-o formă XML. De exemplu, dacă proprietatea Namespace este „my_namespace” şi proprietatea Prefix este „pfx”, atunci XML asociat DataSet-ului va arata în felul următor :

<pfx:Scores xmlns:pfx="my_namespace"> <Students xmlns="my_namespace"> <FirstName>Art</FirstName> <LastName>Ant</LastName> <StudentId>1</StudentId> </Students> <Students xmlns="my_namespace"> <FirstName>Bev</FirstName> <LastName>Bug</LastName> <StudentId>2</StudentId> </Students> ... <TestScores xmlns="my_namespace"> <StudentId>1</StudentId> <TestNumber>1</TestNumber> <Score>78</Score> </TestScores> <TestScores xmlns="my_namespace"> <StudentId>1</StudentId> <TestNumber>2</TestNumber> <Score>81</Score> </TestScores> ... </pfx:Scores>

Tabelul următor descrie cele mai folosite metode ale DataSet-ului.

Metoda Scop

AcceptChanges Accepta toate schimbările care au fost făcute de când s-a apelat ultima oară AcceptChanges.

Clear Şterge toate înregistrările din tabelul din DataSet.

Clone Efectuează o copie a DataSet-ului, incluzând tabelele, relaţiile şi constrângerile fără a include datele.

Copy Efectuează o copie a DataSet-ului, incluzând tabelele,relaţiile şi constrângerile incluzând datele.

Page 23: 07 VB2008 Baze de Date

Introducere în Visual Studio .Net

23

GetChanges Efectuează o copie a DataSet-ului, în care vor fi copiate doar înregistrările modificate.

GetXml Returnează un string conţinând reprezentarea XML a DataSet-ului.

GetXmlSchema Returnează un definiţia schemei XML a DataSet-ului.

HasChanges Returnează True dacă tabelele din DataSet conţin modificări.

Merge Combină un DataSet, DataTable sau şir de obiecte DataRow în acest DataSet.

ReadXml Citește datele din XML în DataSet.

ReadXmlSchema Citește forma XML în DataSet.

RejectChanges Anulează toate schimbările făcute de când s-a încărcat DataSet-ul şi până la apelarea funcţiei AcceptChanges.

WriteXml Scrie datele din DataSet în XML.

WriteXmlSchema Scrie XSD din DataSet într-un fişier XML.

Câteva dintre aceste metode sunt conţinute şi de către alte obiecte. De exemplu HasChanges returnează True dacă un tabel din DataSet conţine modificari. Obiectele DataTable şi DataRow au de asemenea metoda HasChanges care returnează True dacă conţin modificări.

Alte metode de acest fel ar mai fi AcceptChanges, Clear, Clone, Copy, GetChanges, şi RejectChanges.

7.9. DataTable

Clasa DataTable reprezintă datele dintr-un tabel din DataSet. Un DataTable conţine obiecte de tip DataRow, pentru a reprezenta datele, obiecte de tip DataColumn care definesc coloanele tabelului, obiecte de tip Constraints şi obiecte care reprezintă relaţiile dintre tabele. Acest obiect oferă de asemenea metode şi evenimente pentru manipularea înregistrărilor.

Tabelul următor descrie cele mai folosite proprietăţi ale obiectului DataTable.

Proprietate Scop

CaseSensitive Determină dacă string-urile de comparare din DataTable sunt case sensitive.

ChildRelations O colecţie de obiecte de tip DataRelation care definesc relaţii părinte-copil, unde tabelul este părintele.

Columns O colecţie de obiecte de tip DataColumn care defineşte coloanele tabelului (numele coloanei, tipul de date, valoarea implicita, lungime maximă etc.)

Constraints O colecţie de obiecte de tip Constraints care reprezintă constrângerile asupra bazei de date. O ForeignKeyConstraint cere ca unele valori dintr-un tabel să fie prezente în alt tabel. O UniqueConstraint constă în faptul că o valoare trebuie să fie unica într-un tabel.

DataSet DataSet-ul care conţine DataTable.

DefaultView Returnează un obiect DataView unde putem vedea, sorta şi filtra înregistrările din tabel.

HasErrors Returnează True dacă una din înregistrările din DataTable conţine o eroare.

MinimumCapacity Capacitatea iniţială a tabelului.

ParentRelations O colecţie de obiecte de tip DataRelation care definesc relaţii părinte-copil, unde tabelul este copilul.

Prefix Determină prefixul XML pe care îl foloseşte DataTable-ul.

PrimaryKey Setează cheia primară a tabelului. Cheia este unică şi oferă acces mai rapid la înregistrări.

Page 24: 07 VB2008 Baze de Date

Medii şi Tehnologii de Programare – curs

24

Rows O colecţie de obiecte DataRow care conţin înregistrările

TableName Numele tabelului

Proprietatea XML a DataTable afectează modul în care sunt citite şi scrise datele într-o formă XML. De exemplu, dacă proprietatea Namespace este „my_namespace” şi proprietatea Prefix este „pfx”, atunci XML asociat DataTable va arata în felul următor :

<pfx:Students xmlns:pfx="my_namespace"> <FirstName xmlns="my_namespace">Art</FirstName> <LastName xmlns="my_namespace">Ant</LastName> <StudentId xmlns="my_namespace">1</StudentId> </pfx:Students>

Metodele cele mai folosite sunt :

Metoda Scop

AcceptChanges Acceptă toate schimbările care au fost făcute de când s-a apelat ultima oară AcceptChanges.

Clear Şterge toate înregistrările din tabelul din DataTale

Clone Efectuează o copie a DataTable, incluzând tabelele,relaţiile şi constrângerile fără a include datele.

Compute Calculează valoarea unei expresii folosind înregistrările care satisfac filtrarea.

Copy Creează o copie a DataTable, incluzând tabelele, relaţiile şi constrângerile incluzând datele.

GetChanges Efectuează o copie a DataTable, în care vor fi copiate doar înregistrările modificate.

GetErrors Şir de DataRow care conţin erori

ImportRow Copiază datele dintr-un DataRow în DataTable.

LoadDataRow Această metodă ia ca şi parametru un şir de valori. Caută în tabel o înregistrare a cărei valori se potrivesc cu valoarea din cheia primara a şirului. Dacă nu găsește o astfel de înregistrare, va folosi valorile pentru a crea o înregistrare nouă. Returnează un obiect de tip DataRow.

NewRow Creează un nou obiect de tip DataRow care să se potrivească cu schema tabelului. Pentru a adăuga o înregistrare noua la tabel, putem crea o înregistrare noua cu DataRow şi apoi să folosim metoda Rows.Add.

RejectChanges Anulează toate schimbările făcute de când s-a încărcat DataSet-ul şi pana la apelarea funcţiei AcceptChanges

Select Returnează un şir de obiecte DataRow care au fost selectate din tabel.

Evenimentele cele mai folosite pentru un DataTable sunt prezentate în tabelul următor.

Eveniment Scop

ColumnChanged Apare după ce o valoare a fost modificată în înregistrare.

ColumnChanging Apare în timp ce o valoare este modificată în înregistrare.

RowChanged Apare după ce o înregistrare s-a modificat şi utilizatorul trece la o nouă înregistrare.

RowChanging Apare după ce o înregistrare a fost modificată.

RowDeleted Apare după ce o înregistrare a fost ștearsă.

RowDeleting Apare în timp ce o înregistrare este ștearsă.