Teorija za proučavanje kod kuće:

1.

Većina trenutno prisutnih aplikacija vrši obradu podataka. Najčešći način skladištenja i korišćenja uskladištenih podataka je upotreba baza podataka. U najjednostavnijim slučajevima, aplikacije koje pristupaju bazi podataka omogućavaju svojim korisnicima da pretražuju podatke i prikazuju ih u tabelarnom obliku. Za pristup podacima projektanti aplikacija mogu koristiti različite tehnologije.

U prošlosti je razvijeno više standardnih interfejsa za pristup bazama podataka. Svaki sistem za upravljanje bazama podataka (eng. Database Management System – DBMS) poseduje sopstveni programski interfejs (eng. application programming 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 interfejse u zavisnosti od konkretnog DBMS-a koji koriste.

Open Database Connectivity (ODBC) standard je razvijen sa ciljem da obezbedi načine za manipulaciju podacima u relacionim bazama podataka koji bi bili nezavisni od konkretnog DBMS-a. Microsoft je razvio OLE DB, objektno-orijentisani interfejs koji enkapsulira funkcionalnosti servera baza podataka. OLE DB je razvijen ne samo za relacione baze podataka već ima i mogućnost korišćenje drugih tipova podataka. Ovaj interfejs nisu mogli koristiti projektanti koji su svoje aplikacije razvijali korišćenjem Visual Basic-a i script jezika pa je Microsoft razvio Active Data Object (ADO) interfejs. ADO koristi funkcionalnosti OLE DB interfejsa i može biti korišćen iz bilo kog programskog jezika.

ADO.NET je naslednik ADO-a i deo je Microsoft-ove .NET platforme.

Funkcionalnosti ADO.NET-a baziraju se na korišćenju objekta pod nazivom DataSet. DataSet predstavlja lokalnu kopiju podataka pribavljenih iz baze podataka i može sadržati više od jedne tabele. Verovatno najbitnija karakteristika ovog objekta je činjenica da pruža mogućnost manipulacije nad podacima bez potrebe da veza sa bazom podataka bude u svakom trenutku otvorena. Prethodne tehnologije za pristup podacima su pretpostavljale da je veza sa bazom podataka aktivna za vreme izvršenja koda koji vrši obradu podataka. Stalno aktivna konekcija dozvoljavala je trenutne izmene podataka i nadgledanje promena za vreme izvršenja koda. Problem je predstavljao ograničeni broj konekcija koje je server baze podataka mogao da pruži korisnicima pa su nakon zauzeća svih dostupnih konekcija ostali korisnici morali da čekaju da se neka od konekcija oslobodi.

ADO.NET ima u potpunosti drugačiji pristup u odnosu na prethodnike. Konekcija sa bazom podataka se i dalje kreira ali je moguće mnogo ranije osloboditi konekciju i učiniti je dostupnom ostalim korisnicima. Razlog je mogućnost pribavljanja kopije podataka iz baze i skladištenja ovih podataka u DataSet objektu. Nakon pribavljanja podataka, moguće je zatvoriti konekciju pre početka obrade podataka. Naravno, nakon završetka obrade podataka izmenjena je jedino lokalna kopija podataka pa je neophodno ponovo otvoriti konekciju ka bazi podataka kako bi bilo moguće snimiti izmene.

2.

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.

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 DBMS- om. Svaki od data provider-a poseduje skup klasa koje omogućavaju izvršenje osnovnih funkcionalnosti.

Osnovne klase ADO.NET Data Provider -a
Klasa Značenje

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 korišćenjem kursora na serverskoj strani

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

Transaction

Enkapsulira transakciju baze podataka

Tabela 1: Klase ADO.NET Data Provider-a

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

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. 

Struktura data provider-a .NET platforme prikazana je na slici.

(U toku prvog polugodišta ove školske godine je rađeno sa više različitih provider-a, u okviru predmeta Primenjene informacione tehnologije.)

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.


Šta su Data Provider klase?

Data Provider je skup klasa koje omogućavaju komunikaciju sa bazom podataka. U C# jeziku i .NET okruženju koriste se System.Data.SqlClient klase za rad sa Microsoft SQL Server bazom podataka.

Glavne klase Data Provider-a:

  • SqlConnection – koristi se za uspostavljanje veze sa bazom podataka.

  • SqlCommand – omogućava izvršavanje SQL komandi.

  • SqlDataReader – služi za čitanje podataka iz baze.

  • SqlDataAdapter – koristi se u diskonektovanom načinu rada.

1. Kreiranje konekcionog objekta (SqlConnection)

Konekcioni objekat omogućava aplikaciji da uspostavi vezu sa bazom podataka.

Sintaksa:

  using System.Data.SqlClient;

  SqlConnection konekcija = new SqlConnection("Server=localhost;Database=Skola;User Id=sa;Password=lozinka;");
  konekcija.Open();
// ovde se nešto radi .... konekcija.Close();
  • Server – adresa servera (localhost ili . za lokalni server, mada može i IP adresa ili naziv računara).

  • Database – naziv baze.

  • User Id/Password – koristi se za SQL autentifikaciju (sa - sistem administrator).

  • Integrated Security=True – koristi Windows autentifikaciju (ako se ne koristi username i password).

2. Kreiranje komandnog objekta (SqlCommand)

Komandni objekat služi za izvršavanje SQL naredbi (SELECT, INSERT, UPDATE, DELETE).

Sintaksa:

  SqlCommand komanda = new SqlCommand("SELECT * FROM Ucenici", konekcija);

Komanda može biti:

  • Tekstualna – SQL upit unutar koda.

  • Stored procedure – pozivanje SQL procedure.


Primer 1: Otvaranje konekcije i prikaz poruke o statusu

// Primer za Visual Studio 2010 i konzolnu aplikaciju:

using System; using System.Data.SqlClient; using System.Windows.Forms; class Program { static void Main() { string connectionString = "Server=localhost;Database=Skola;User Id=sa;Password=lozinka;"; using (SqlConnection konekcija = new SqlConnection(connectionString)) { try { konekcija.Open(); MessageBox.Show("Uspešno povezivanje sa bazom!"); } catch (Exception ex) { MessageBox.Show("Greška pri povezivanju: " + ex.Message); } } } }
Verzija 2: isti zadatak - Windows Forms Aplikacija ...
  • Kreirati Windows Forms Aplikaciju.
  • Na početnu formu postaviti dugme za testiranje konekcije ka bazi Skola
    • klikom na dugme treba da iskoči poruka da li je uspešno povezivanje na bazu ili ne

Rešenje: dvoklikom na dugme kreirati metodu koja se izvršava prilikom događaja klika na dugme, a zatim tu postaviti funkcionalnost

private void button1_Click(object sender, EventArgs e)
{
string connectionString = "Server=nazivLokalnogServera;Database=Skola;Integrated security=True";
using (SqlConnection konekcija = new SqlConnection(connectionString))
{
try
{
konekcija.Open();
MessageBox.Show("Uspešno povezivanje sa bazom!");
}
catch (Exception ex)
{
MessageBox.Show("Greška pri povezivanju: " + ex.Message);
}
}
}

Dalji rad nastavljamo u ovoj WinForms aplikaciji ...


Primer 2: Izvršavanje SQL komande (INSERT)

Na formu dodati dugme za dodavanje jednog učenika sa hard-kodovanim podacima ... Klikom na dugme treba da se u bazu unese učenik Petar Petrović sa ID=100

Rešenje: 

  • Potrebni su
    • konekcioni string
    • konekcija
    • upit za dodavanje učenika
    • komanda koja se pokreće tek kada je konekcija otvorena.

Programski kod koji je ključan za ovaj primer:...

   string upit = "INSERT INTO Ucenici (ID, Ime, Prezime) VALUES (101, 'Petar', 'Petrović')";
   SqlCommand komanda = new SqlCommand(upit, konekcija);
   komanda.ExecuteNonQuery();  
private void button2_Click(object sender, EventArgs e)
{
string connectionString = "Server=localhost;Database=Skola;Integrated security=True";
using (SqlConnection konekcija = new SqlConnection(connectionString))
{
try
{
konekcija.Open();
string upit = "INSERT INTO Ucenici (ID, Ime, Prezime) VALUES (101, 'Petar', 'Petrović')";
SqlCommand komanda = new SqlCommand(upit, konekcija);
komanda.ExecuteNonQuery();
MessageBox.Show("Petar Petrović je upisan");
}
catch (Exception ex)
{
MessageBox.Show("Greška: " + ex.Message);
}
}
}

Napomena:

  • ExecuteNonQuery() se koristi za INSERT, UPDATE i DELETE komande.


3. Vežbe za učenike:

  1. Kreirati aplikaciju koja otvara konekciju sa bazom podataka i ispisuje status povezivanja.

  2. Kreirati SQL komandu za dodavanje učenika u tabelu Ucenici.

  3. Testirati aplikaciju i proveriti upis u bazi.

Napomena za učenike:
   Kod možete testirati u Visual Studio 2010 uz dodatak System.Data.SqlClient biblioteke.

Napomena: Pošto u našem primeru ID nije identity (autoincrement)  potrebno je UNETI i ID za svakog od učenika !


Za učenike koji su sve uradili ili za domaći zadatak:
  • Proširiti aplikaciju dodavanjem funkcionalnosti za brisanje i ažuriranje podataka u tabeli Ucenici.



Last modified: Thursday, 11 December 2025, 2:45 AM