DOMAĆI - ADO.NET Snabdevači podacima (Data Provider-i) i kreiranje konekcije ka bazi
Od ranije nam je poznato da postoje različite baze podataka (Sql Server, MySQL, Sybase IQ, Oracle, DB2 …). Znamo i da je razvijeno više standardnih interfejsa za pristup bazama podataka. Svaki sistem za upravljanje bazama podataka (Database Management System – DBMS) poseduje sopstveni programski interfejs (application program interface – API) čijim korišćenjem je moguće iz programskog koda odnosno iz aplikacije, vršiti manipulaciju podacima u bazi podataka.
Programski interfejs (API) predstavlja kolekciju objekata i metoda koji omogućavaju pozivanje funkcija sistema za upravljanje bazama podataka (DBMS-a) iz programskog koda. Svaki DBMS poseduje svoj programski interfejs pa je bilo neophodno razviti standarde za pristup bazama podataka kako projektanti aplikacija ne bi morali da koriste različite intefejse u zavisnosti od konkretnog DBMS-a koji koriste.
Razvijeno je mnogo API-a, sa različitim interfejsima, i u različitim programskim jezicima:
ADO.NET
ADO.NET je skup klasa za pristup i manipulaciju podacima koji su smešteni u izvorima podataka.
ADO.NET Dobavljači podataka (Data Provider):
ADO.NET ne poseduje samo jedan jedinstveni skup tipova objekata koji komuniciraju sa različitim sistemima za upravljanje bazama podataka (DBMS). ADO.NET poseduje više skupova tipova objekata koji komuniciraju sa DBMS-om. Ove skupove tipova objekata nazivamo data provider-ima. Svaki od data provider-a optimizovan je za interakciju sa konkretnim DBMS-om. Prednost ovakvog pristupa je mogućnost pojedinačnih data provider-a da imaju mogućnost manipulacije objektima koji su specifični za posmatrani DBMS. Još jedna od prednosti je način komunikacije između data provider-a i DBMS-a. Naime, s obzirom da je svaki data provider optimizovan za rad sa konkretnim DBMS-om, on komunicira direktno sa DBMS-om tj. ne postoji međusloj koji bi prilagodio zahteve korisnika konkretnom DBMS-u. Znači, svaki data provider je optimizovan za rad sa konkretnim DBMS-om.
Data Provider
Data provider je najlakše posmatrati kao skup tipova objekata definisanih u određenom prostoru imena (namespace) koji imaju mogućnost direktne komunikacije sa konkretnim DBMS-om. Svaki od data provider-a poseduje skup klasa koje omogućavaju izvršenje osnovnih funkcionalnosti.
U našem slučaju, u daljem radu koristimo ADO.NET:
Veza sa bazom podataka realizuje se i održava pomoću ADO.NET komponente Data Provider. Data Provider je u stvari skup komponenti koje zajedničkom funkcionalnošću obezbeđuju efikasnu komunikaciju između baze podataka i aplikacije.
Microsoft.NET Framework trenutno isporučuje neke vrste provajdera (snabdevača, isporučilaca) podataka počev od: SQL Server .NET Data Provider koji je dizajniran za rad sa Microsoft SQL Serverom i OleDb .NET Data Provider koji povezuje aplikaciju sa nekim drugim vrstama baza podataka.
Microsoft .NET platforma poseduje niz ugrađenih data provider-a za različite DBMS-ove.
Spisak ugrađenih data provider-a ( prikaži/sakrij ):
| Data Provider | Prostor imena (namespace) | Biblioteka |
|---|---|---|
| OLE DB | System.Data.OleDb | System.Data.dll |
| Microsoft SQL Server | System.Data.SqlClient | System.Data.dll |
| Microsoft SQL Server Mobile | System.Data.SqlServerCe | System.Data.SqlServerCe.dll |
| ODBC | System.Data.Odbc | System.Data.Dll |
| Oracle | System.Data.OracleClient | System.Data.OracleClient.dll |
Pored data provider-a koji su ugrađeni u .NET platformu, moguće je koristiti data provider-e koje obezbeđuju pojedinačni proizvođači besplatnih ili komercijalnih DBMS-ova poput SQLite, DB2, MySQL, PostgreSQL ili Sybase.
(Ako ćete koristiti MySQL, treba da instalirate MySql Data Provider)
Iako će se imena konkretnih objekata svakog od konkretnih Data Provider objekata razlikovati (npr. SqlConnection, OracleConnection, OdbcConnection ili MySqlConnection), svi su izvedeni iz iste klase i implementiraju iste interfejse pa je nakon savladavanja korišćenja jednog od data provider-a relativno jednostavno koristiti sve ostale.
Svaki Data Provider sastoji se od sledećih komponentnih klasa.
-
Connection objekat omogućava konekciju sa bazom podataka
-
Command objekat sadrži informaciju o SQL SELECT upitu ili INSERT, UPDATE, DELETE naredbi koja se sprovodi nad bazom podataka.
-
The DataReader objekat (recordset) koji učitava podatke u direktnoj konekciji sa bazom podataka.
-
The DataAdapter objekat popunjava diskonektovani DatSet ili DataTable sa odgovarajućim podacima i ažurira podatke u DB.
Iako će se imena konkretnih objekata svakog od konkretnih Data Provider objekata razlikovati (npr. SqlConnection, OracleConnection, OdbcConnection ili MySqlConnection), svi su izvedeni iz iste klase i implementiraju iste interfejse pa je nakon savladavanja korišćenja jednog od data provider-a relativno jednostavno koristiti sve ostale.
Scenario pristupa podacima korišćenjem ADO.NET komponenti odvija se na sledeći način:
Objekat Connection uspostavlja vezu između baze podataka i aplikacije. Ta konekcija se koristi za pristup bazi direktno pomoću Command objekta ili pomoću objekta DataAdapter. Command objekt obezbeđuje realizaciju odgovarajućeg SQL upita u direktnoj komunikaciji sa bazom držeći sve vreme pristupa konekciju otvorenom. U slučaju da vraća više od jedne vrednosti Command objekt vraća aplikaciji DataReader objekt kao snabdevača aplikacije podacima. Podaci dobijeni na ovaj način mogu biti direktno procesuirani od strane logike aplikacije. Drugi način snabdevanja aplikacije podataka realizuje se indirektno pomoću DataAdapter objekta koji popunjava objekat DataSet. Ažuriranje podataka u bazi od strane aplikacije može se izvesti korišćenjem ili objekta Command ili pomoću objekta DataAdapter.
Šta je konekcija?
Veza do baze podataka u ADO.NET-u uspostavlja se preko komponente Connection. Konkretni objekat koji se koristi za konekciju zavisi od primenjenog posrednika koji se koristi za dobavljanje podataka (Data Provider). Međutim, važno je da zapamtite da sve klase za konekciju u ADO.NET-u implementiraju isti interfejs, a to znači da imaju zajednički skup metoda.
Jedan od načina za dodavanje nove konekcije je iz menija Tools, izborom opcije Connect to Database...
Drugi način je iz Server Explorer-a: desni klik miša i Add Connection...
Za kreiranje konekcije vam je potrebno da prvo odaberete vrstu izvora podataka (Data Source), zatim naziv servera (Server name), po potrebi da unesete korisničko ime i lozinku, zatim da odaberete na koju bazu se povezujete ... ... izbor koji imate zavisi od opcija koje su postavljene na računaru na kojem radite).
Na času ćete dobiti na koju bazu da se povežete.
Konekciju obavezno testirajte, pritiskom na dugme Test Connection. Ukoliko test ne prođe, parametre konekcije niste postavili dobro i dalji rad sa podacima neće biti moguć.
Istovremeno, Server Explorer identifikuje ovu konekciju do baze. Možete lako prići do podataka o tabelama i drugim objektima koji su kreirani u bazi. Isto tako, koristeći Server Explorer, moguće je videti i sadržaj u tabelama. (desni klik miša - Retrieve Data ... dobićete sadržaj tabele)
Kreiranje konekcije ka bazi podataka
Pre pribavljanja ili izmene podataka neophodno je kreirati konekciju ka izvoru podataka. Broj raspoloživih konekcija je ograničen pa je potrebno držati konekciju otvorenom što je kraće moguće.
Konekcija ka izvoru podataka u ADO.NET-u enkapsulirana je klasom Connection. Prilikom kreiranja instance klase Connection neophodno je definisati ConnectionString atribut ove klase.
ConnectionString atribut predstavlja formatirani niz karaktera sastavljen od niza ime/vrednost parova odvojenih međusobno karakterom ‘;’. Ovaj atribut najčešće sadrži informacije o imenu mašine kojoj pristupamo, načinu autentifikacije korisnika, imenu baze kojoj pristupamo i sl. U nastavku je dat primer kreiranja konekcije korišćenjem Microsoft SQL Server data provider-a , Oracle data provider-a i MySQL data provider-a.
SqlConnection conn = new
SqlConnection();
conn.ConnectionString = "Data Source=localhost;Initial
Catalog=TestDB;Integrated
Security=SSPI");
Oracle
OracleConnection
conn = new OracleConnection();
conn.ConnectionString = "Data
Source=192.168.1.190/lab.skola.edu.rs;User Id=21101;Password=21101";Data Source ukazuje na ime servera na kome se nalazi baza podataka kojoj pristupamo. Initial Catalog predstavlja ime baze podataka kojoj ćemo pristupati korišćenjem kreirane konekcije. Integrated Security ukazuje na način autentifikacije korisnika. U posmatranom slučaju pristupa se korišćenjem Windows korisničkog naloga. Alternativno, moguće je proslediti username i password naloga koji želimo da koristimo za pristup bazi podataka.
MySQL
Microsoft Visual Studio ne dolazi sa ugrađenom podrškom za MySQL !
Prvo treba biti svestan da za MySQL treba instalirati MySqlConnector – preuzima se sa sajta proizvođača – da bi Visual Studio mogao da radi sa MySQL.
Drugo, od verzije Visual Studio 2015 pa nadalje, postoji i dodatak „MySQL for Visual Studio“ koji omogućava lakši rad ( pristup vizuelnim alatima )
I jedno i drugo se mogu postaviti na računar ako se koristi web installer.
Tek kada na računaru postoji instaliran MySqlConnector, može da se kreira konekcija korišćenjem MySql Data provider-a:
1.način:
MySqlConnection konekcija = new
MySqlConnection("server=localhost;user
id=ucenik;password=test;database=proba");
2.način:
MySqlConnection konekcija = new
MySqlConnection();
konekcija.ConnectionString = "server=localhost;user
id=ucenik;
password=test; database=proba";
3.način:
string konekcioniString = "server=localhost;user
id=ucenik;password=test;database=proba";
MySqlConnection konekcija =
new MySqlConnection(konekcioniString);
Server ukazuje na ime servera na kome se nalazi baza podataka kojoj pristupamo, dok database predstavlja ime baze podataka kojoj ćemo pristupati korišćenjem kreirane konekcije. U posmatranom slučaju pristupa se korišćenjem username i password naloga koji želimo da koristimo za pristup bazi podataka.
Pre korišćenja konekcije neophodno je eksplicitno otvoriti konekciju:
Otvaranje konekcije
conn.Open();
Nakon eksplicitnog poziva funkcije za otvaranje konekcije, otvorena je i aktivna konekcija ka bazi podataka. Nakon završetka obrade podataka neophodno je zatvoriti konekciju pozivom funkcije za zatvaranje konekcije:
Zatvaranje konekcije
conn.Close(); Objekti klase Connection poseduju skup atributa kojima je moguće upravljati tokom izvršenja transakcija nad bazom podataka i pribaviti informacije vezane za izvor podataka kome se pristupa.
Konekcije i Obrada izuzetaka
Preporučuje se da se operacije nad bazom podataka koje mogu da dovedu do greške u program pišu unutar try bloka. Unutar try bloka vrši se i otvaranje konekcije pozivom metode Open objekta klase Connection. Samo kreiranje konekcije trebalo bi da bude izvan try bloka jer bi u protivnom ograničili oblast važenja ovog objekta. Ukoliko dođe do izuzetaka oni su objekti klase Connection. Poželjno je i definisanje finally bloka u kojem će se vršiti zatvaranje konekcije bez obzira da li je pri izvršavanju sql komandi došlo do grešaka ili nije.
Bitno je da zapamtite da NIŠTA OD OVOGA NIJE STRAŠNO.
Slično je, bez obzira koju bazu koristili: I za SQL Server bazu i za MySQL bazu i za Access bazu vam treba otvaranje konekcije, za koju vam treba konekcioni string, povezivanje i smeštanje podataka negde, a na kraju da ZATVORITE konekciju. Za bilo koju bazu možete raditi direktno iz grafičkog okruženja i prigramski. Za bilo koju vam treba konektor za Visual Studio.
Razlika je u tome što je konektor za SQL Server ugrađen u Visual studio, za Access može biti ugrađen samo ako imate i Access na kompu, a za MySQL morate sami da postavite konektor.