Na početku je teorijski deo - pojmovi koje pominjemo na času i objašnjenja

Na kraju su dve vežbe koje su prikazane u obliku video snimaka (klik na naziv vežbe za direktan prelazak na nju):


Data provider je najlakše posmatrati kao skup tipova objekata definisanih u određenom prostoru imena (eng. namespace) koji imaju mogućnost direktne komunikacije sa konkretnim DBMSom.

Svaki od data provider-a poseduje skup klasa koje omogućavaju izvršenje osnovnih funkcionalnosti. Sve klase konkretnih data provider-a imaju zajedničke roditeljske klase tj izvedene su iz istog skupa klasa i interfejsa, koji se nalaze u System.Data.Common prostoru imena odnosno u System.Data prostoru imena.

Osnovne klase ADO.NET Data Provider-a:

Klasa   Za šta koristimo objekte klase
Connection   Omogućava otvaranje i zatvaranje konekcije ka bazi podataka
Command   Predstavlja SQL upit ili uskladištenu proceduru. Omogućava pristup DataReader objektu konkretnog data provider-a
DataReader   Omogućava čitanje podataka red po red
DataAdapter   Prenosi DataSet objekte između klijenta i izvora podataka. Poseduje konekciju i skup od četiri osnovne operacije za selektovanje, dodavanje, izmenu i brisanje podataka u izvoru podataka
Parameter   Predstavlja imenovani parametar u parametrizovanom upitu

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.

Microsoft .NET platforma poseduje niz ugrađenih data provider-a za različite DBMS-ove.

Spisak ugrađenih data provider-a:

Data Provider Prostor imena (namespace)
OLE DB System.Data.MySql
Microsoft SQL Server System.Data.SqlClient
Microsoft SQL Server Mobile System.Data.SqlServerCe
ODBC System.Data.Odbc
Oracle System.Data.OracleClient

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.

Drugim rečima, da biste radili da bazama, sem što morate imati using System.Data; u zavisnosti koji DBMS koristite, trebate dodati i using System.Data.(deo koji se odnosi na vaš DBMS) - od kojih su neki navedeni u prethodnoj tabeli.


Direktan pristup podacima korišćenjem ADO.NET-a

Najlakši način izvršenja svih operacija nad bazom podataka je direktno izvršenje svih operacija pri čemu se ne vodi računa o lokalnim kopijama podataka.
Ovakav način izvršenja operacija nad bazom podataka je dobro rešenje kada je potrebno pročitati podatke ili izmeniti podake u jednom redu neke od tabela relacione baze podataka. Ovakav pristup nije efikasan ukoliko je potrebno modifikovati više različitih redova iz jedne ili više tabela.

Redosled operacija prilikom pribavljanja podataka korišćenjem ovakvog pristupa sastoji se iz sledećih koraka:

1. Kreirati Connection, Command i DataReader objekte

2. Otvoriti konekciju

3. Koristiti DataReader za čitanje podataka iz baze podataka

4. Zatvoriti konekciju



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.

Connection

Connection objekat sadrži sve podatke neophodne za realizaciju konekcije aplikacije sa bazom podataka.

Sve informacije neophodne za uspostavljanje komunikacionog kanala između aplikacije i baze podataka sadržani su u osobini ConnectionString objekta Connection.

Connection objekat takođe podržava izvršavanje transakcija nad bazom podataka.

Command

Možemo koristiti Command objekte za izvršavanje različitih SQL naredbi nad bazom podataka pomoću odgovarajuće konekcije. Pomoću ovog objekta možemo koristiti za egzekuciju uskladištenih procedura na strani servera, izvršiti SQL naredbe ili vratiti direktno aplikaciji kompletne tabele iz baze. Command objekti sadrže tri metode koje se koriste za izvršavanje različitih naredbi nad bazom podataka:

  • ExecuteNonQuery. Izvršava naredbe koje ne vraćaju informacije aplikaciji već su usmerena ka bazi (INSERT, UPDATE, ili DELETE).

  • ExecuteScalar. Vraća aplikaciji pojediničnu vrednost pomoću SQL upita (na primer GROUP BY… HAVING struktura) .

  • ExecuteReader. Vraća rezultate pomoću DataReader objekta.

DataReader

DataReader objekt vrši direktan brzi pristup bazi. Ovaj objekt (recordset komponenta) drži konekciju aplikacije sa bazom otvorenom sve vreme i ima mogućnost učitavanja podataka iz baze u samo jednom prolazu bez iteracija (forward-only, read-only). Za razliku od ostalih ADO.NET komponenti nemoguće je napraviti direktnu instancu ovog objekta već se on vraća aplikaciji pomoću ExecuteReader metode objekta Command. Koristi se u slučajevima kada nije neophodno čuvati redove tabela u lokalnoj memoriji računara već ih logika aplikacije odmah koristi. Ovaj objekt dakle vraća jedan po jedan red tabele aplikaciji u direktnoj vezi aplikacije i baze i omogućava najbrži mogući transfer podataka. Nedostatak je što zahteva ekskluzivan pristup Connection objektu za vreme trajanja izvršavanja DataReader objekta.

DataAdapter

DataAdapter je klasa koja omogućava realizaciju diskonektovane ADO.NET arhitekture pristupa podacima. disconnected data access. Ovaj objekat realizuje sve elemente komunikacije između baze podataka i objekta DataSet. DataAdapter popunjava objekte DataTable ili DataSet sa podacima iz baze pozivom svoje Fill metode. Nakon manipulacije navedenim podacima smeštenim u lokalnoj memoriji DataAdapter pozivanjem svoje Update metode omogućava ažuriranje baze modifikovanim podacima.

DataAdapter nudi četiri svoje osobine koje reprezentuju odgovarajuće SQL naredbe:

  • SelectCommand. Sadrži tekst SQL naredbe (objekt) koji selektuje podatke iz baze podataka. SQL naredba se izvršava pozivom Fill metode popunjavajući objekte DataTable ili DataSet.

  • InsertCommand. Sadrži tekst SQL naredbe (objekt) koji insertuje jedan red u tabelu.

  • DeleteCommand. Sadrži tekst SQL naredbe (objekt) koji briše jedan red iz tabele.

  • UpdateCommand. Sadrži tekst SQL naredbe (objekt) koji ažurira podatke u bazi podataka.


Potrebno je ponoviti deo lekcije od pre nedelju dana:

14.09 (b) Kreiranje konekcije ka bazi podataka

Pre pribavljanja ili izmene podataka neophodno je kreirati konekciju ka izvoru podataka.

Prilikom kreiranja instance klase Connection neophodno je definisati ConnectionString, koji sadrži informacije o imenu mašine kojoj pristupamo, načinu autentifikacije korisnika, imenu baze kojoj pristupamo i sl.

Primer kreiranja konekcije za MS SQL Server:

Data Provider   Kako se kreira konekcija
Microsoft SQL Server   SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=localhost;Initial Catalog=TestDB;Integrated Security=SSPI");

A kako da se povežemo na koristimo MySql?

Microsoft Visual Studio ne dolazi sa ugrađenom podrškom za MySQL !
Prvo treba biti svestan da za MySQL treba instalirati MySqlConnector.
Iako od verzije Visual Studio 2015 pa nadalje, postoji i dodatak „MySQL for Visual Studio“ koji omogućava lakši rad ( pristup vizuelnim alatima ), u školi i dalje koristimo stariju verziju.
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);

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();

Obrada izuzetaka (preporuka)

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.

try
{
   con.Open(); // (Izvrsavanje ADO.NET komandi)
}
catch (MySqlException err)
{
   Console.WriteLine(err.ToString());
}
finally
{
   con.Close();


14.09. (c) Kreiranje komande

Nakon kreiranja konekcije ka bazi podataka, neophodno je izvršiti SQL naredbe za manipulaciju nad podacima.

Command objekat dozvoljava direktan pristup podacima u bazi u konektovanom okruženju. Ovaj objekat sadrži referencu na SQL komandu ili uskladištenu proceduru koje se mogu izvršavati direktno. Koristeći odgovarajući Command objekat moguće je izvršavati Select, Insert, Update i Delete naredbe nad elementima baze podataka.

Ukoliko koristimo Microsoft SQL Server data provider, SQL naredbe se izvršavaju korišćenjem instanci klase SqlCommand, tj korišćenjem SqlCommand objekta.

Ukoliko koristimo Oracle data provider, SQL naredbe se izvršavaju korišćenjem instanci klase OracleCommand, tj korišćanjam OracleCommand objekta.

Ukoliko koristimo MySQL data provider, SQL naredbe se izvršavaju korišćenjem instanci klase MySqlCommand, tj korišćenjem MySqlCommand objekta,

ako koristite Access bazu (.mdb), koristi se OleDbCommand, …

Prilikom kreiranja komande moguće je navesti SQL upit kao argument konstruktora objekta ili korišćenjem CommandText atributa SqlCommand objekta.

Prilikom kreiranja komande neophodno je navesti konekciju koja će se koristiti za izvršenje komande. Konekciju je moguće navesti kao argument konstruktora objekta ili korišćenjem Connection atributa MySqlCommand objekta.

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=.;Initial Catalog=BazaKnjiga;Integrated Security=SSPI";
String strSQL = "Select * from Knjiga";
SqlCommand newComm = new SqlCommand();
newComm.Connection = conn;
newComm.CommandText = strSQL;

Prosto kreiranje SqlCommand objekta, ili bilo koje druge komande, ne znači da je SQL upit sadržan u komandi automatski prosleđen na izvršenje. Objekat koji predstavlja komandu je nakon kreiranja samo pripremljen za dalju upotrebu. Najbitnije metode članice SqlCommand objekta prikazane su u tabeli.

Metoda Značenje
Cancel() Poništava izvršenje komande
ExecuteReader() Povratna vrednost funkcije je DataReader objekat izabranog data provider-a
ExecuteNonQuery() Izvršava komandu od koje se ne očekuje da kao povratne vrednosti daje podatke
ExecuteScalar() Varijanta ExecuteNonQuery() koja kao povratnu vrednost vraća jedan podatak

Povratak na početak

Prva vežba

Kako biste se mogli povezati sa bazom podataka iz aplikacije (u grafičkom režimu rada) ?

 VIDEO prezentacija: Pristup bazi i upiti iz Visual Studija:

 

Povratak na početak

Druga vežba

VIDEO LEKCIJA - Upiti iz Visual Studija 2 deo :

Povratak na početak

Last modified: Wednesday, 29 October 2025, 9:32 AM