Utisci korisnika

Da li zato što je DLS novina kod nas (bar za mene)ili još više što će mi koristiti, tek, nalazim da je Arhitektura, izgradnja i održavanje PC računara prava stvar i svakom…

Kada sam na fakultetu polagala ispit iz Obrazovne tehnologije jedno od pitanja je bilo nastava na daljinu. Pojam, značenje, prednosti i nedostaci su mi bili poznati ali u isto vreme daleki, nedostižni…


Kompletna lista utisaka

Testiranje online

Arhitektura računara

Za one koji žele da znaju više.

Windows OS

Ovo bi svakako trebalo da probate.

Odnosi s javnošću

Koliko znate PR?

Pogledajte još neke od testova

Newsletter

Ukoliko želite da Vas redovno obaveštavamo o novostima sa Link eLearning sajta prijavite se na našu newsletter listu.

Ime:

Prezime:

Email:


Anketa

Arhiva anketa

BAZA ZNANJA


Kurs: Core Web Application Technologies

Modul: Komunikacija sa bazom podataka

Autor: Marko Stojićević

Naziv jedinice: Izvršavanje komandi nad bazom podataka


Materijali vezani uz ovu lekciju:

- Test izvršavanje komandi nad bazom podataka
- Izvršavanje komandi nad bazom podataka (PDF dokument)



Korišćenje ADO.NET klasa u konektovanom scenariju

U ADO.NET-u postoje dva osnovna načina rada: konektovani i diskonektovani. Kod konektovanog scenarija resursi se uzimaju sa servera sve dok se konekcija ne zatvori. Korisnik je konstantno povezan na izvor podataka. Prednost konektovanog scenarija je da su podaci  uvek ažurni, konkuretni pristup resursima servera se lakše kontroliše. Nedostatak konektovanog rada je da mora da postoji konstantna mrežna konekcija, kao i mala skalabilnost aplikacije. Na slici je prikazan blok dijagram pristupa bazi podataka primenom ADO.NET tehnologije u konektovanom scenariju. Redosled izvršavanja operacija pri radu u konektovanom scenariju je:

  1. otvaranje konekcije,
  2. izvršavanje komande,
  3. obrada zapisa u Reader-u,
  4. zatvaranje Reader-a
  5. i zatvaranje konekcije.

 

 

Objekat Command

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. Objekat Command implementira IDbCommand interfejs. Ako se kao snabdevač podataka izabere SQL Server .NET snabdevač, odgovarajući komandni objekat se dobija instanciranjem klase SqlCommand. Ako se kao snabdevač podataka odabere OLE DB.NET snabdevač podataka, komandni objekat se dobija instanciranjem klase OleDbCommand. Koristeći odgovarajući Comand objekat moguće je izvršavati SELECT, INSERT, UPDATE  i DELETE naredbe nad elementima baze podataka.


Svojstva interfejsa IDbCommand

Svojstvo CommandText uključuje tekst SQL komande ili naziv uskladištene procedure koje treba izvršiti. Svojstvo CommandType specificira o kakvom se tipu komande radi tj. da li je to Text, odnosno napisana SQL komanda, ili je to StoredProcedure, odnosno uskladištena procedura. Svojstvo Connection ukazaje na Connection objekat koji se koristi za komuniciranje sa bazom podataka. Svaki komandni objekat može imati nula ili više parametara što se specificira svojstvom Parameters.


Metode interfejsa IDbCommand

Metoda ExecuteScalar izvršava komandu koja vraća skalarnu vrednost. Metoda ExecuteReader izvršava komandu koja vraća skup zapisa iz baze. Metoda ExecuteNonQuery izvršava komandu koja ažurira bazu podataka ili menja strukturu baze podataka. Ovde se pod ažuriranjem podrazumeva i ubacivanje i brisanje podataka iz baze.

 

 

Metode objekta Command

Objekat Command implementira interfejs IdbCommand. ExecuteScalar metoda se koristi za izvršavanje upita  koji vraća jednu skalarnu vrednost. ExecuteNonQuery metoda se koristi za izvršavanje INSERT, UPDATE i DELETE komande nad bazom podataka. Metoda ExecuteReader se koristi za izvršavanje SELECT komandi nad bazom podataka koje vraćaju skup zapisa.



Izvršavanje upita koji vraća skalarnu vrednost

Sledeći kod je primer izvršavanja upita koji vraća jednu skalarnu vrednost. Posredstvom Command objekta izvršava se upit SELECT COUNT(*) FROM Customers koji daje broj zapisa u tabeli Customers. Prvi parametar SqlCommand konstruktora predstavlja tekst SQL komande ili naziv procedure sa kojom se radi. Drugi parametar je odgovarajući SqlConnection objekat pomoću koga se vrši konekcija na bazu podataka.

public void izvrsi()
    {
        String konekcioniString = @"Data Source=(local)SQLExpress;
Initial Catalog=Northwind;Integrated Security=True";
        SqlConnection mojaKonekcija = new SqlConnection(konekcioniString);
        String skalarniUpit = "SELECT COUNT(*) FROM Customers";
        SqlCommand mojaSkalarKomanda =
        new SqlCommand(skalarniUpit, mojaKonekcija);
        try
        {
            mojaKonekcija.Open();
            int brojZapisa = Convert.ToInt32(mojaSkalarKomanda.ExecuteScalar());
            sb.Append("U tabeli se nalazi : " + brojZapisa.ToString() + " zapisa" );
        }
        catch (SqlException xcp)
        {
            sb.Append(xcp.Message);
        }
        finally
        {
            if (mojaKonekcija != null)
                mojaKonekcija.Close();
        }
    }


Izvršavanje INSERT (UPDATE i DELETE komande)

Sledeći kod je primer izvršavanja INSERT upita nad tabelom Customers koja se nalazi u bazi podataka Northwind.

public void izvrsi()
    {
        String konekcioniString = @"Data Source=(local)SQLExpress;
        Initial Catalog=Northwind;Integrated Security=True";
        SqlConnection mojaKonekcija = new SqlConnection(konekcioniString);
        String insertUpit = "INSERT INTO Customers (CustomerId, CompanyName, ContactName,
        ContactTitle, Address)  Values ('ABC1','ABC1 Company', 'JS', 'Owner','One My Way')";
        SqlCommand mojaInsertKomanda = new SqlCommand(insertUpit, mojaKonekcija);
        try
        {
            mojaKonekcija.Open();
            mojaInsertKomanda.ExecuteNonQuery();
            sb.Append("Ubacen red u bazu");
        }
        catch (SqlException xcp)
        {
            sb.Append(xcp.Message);
        }
        finally
        {
            if (mojaKonekcija != null)
                mojaKonekcija.Close();
        }
    }


DataReader

DataReader je brz (Read-only, Forward-only) kursor koji se pomera kroz skup zapisa. Svaki DataReader objekat implementira IDataReader interfejs. Pristup podacima korišćenjem objekta DataReader sastoji se od sledećih koraka:

  1. kreira se Command objekat sa odgovarajućim SELECT upitom,
  2. kreira se objekat Connection i otvara se,
  3. izvršava se ExecuteReader() metoda objekta Command koja vraća objekat DataReader-u,
  4. koristeći Read() metodu objekta DataReader prolazi se kroz sve vrste
  5. kada Read() metoda vrati false, zatvara se objekat  DataReader i objekat Connection.

Svojstva i metode DataReader objekta

Read metoda čita  zapis iz DataReader-a i vraća true ako ima još zapisa, false ukoliko se stiglo do poslednjeg zapisa. Podrazumevana pozicija SqlDataReader-a je ispred prvog zapisa. Kada se korišćenjem Read metode pozicioniramo na određeni red u objektu, DataReader tada pojedinim ćelijama u redu pristupa na osnovu njihovog imena ili pozicije. Izraz dataReader[“ImeKolone”] je tipa object i mora se konvertovati u željeni tip podataka. Ukoliko želimo da pročitamo sadržaj druge ćelije, u kojoj znamo da se nalazi celobrojna vrednost, to se može uraditi korišćenjem izraza dataReader.GetInt32(1).

Čitanje skupa zapisa iz baze

Sledeći kod je primer čitanja podataka upotrebom DataReader objekta iz tabele Customers koja se nalazi u bazi podataka Northwind.

public void citaj()
    {
        SqlDataReader myReader = null;
        String konekcioniString = @"Data Source=(local)SQLExpress; Initial Catalog=Northwind;Integrated Security=True";
        SqlConnection mojaKonekcija = new SqlConnection(konekcioniString);
        String mojSelectUpit = "SELECT CustomerID, CompanyName, Address, Phone FROM Customers";
        SqlCommand mojaSelectKomanda = new SqlCommand(mojSelectUpit, mojaKonekcija);
        try
        {
            mojaKonekcija.Open();
            myReader = mojaSelectKomanda.ExecuteReader();
            builder.Append("<TABLE>");
            builder.Append("<TR><TD>Customer ID</TD>");
            builder.Append("<TD>Company Name</TD></TR>");
            while (myReader.Read())
            {
                builder.Append("<TR><TD>" + myReader["CustomerID"].ToString() + "</TD>");
                builder.Append("<TD>" + myReader["CompanyName"].ToString() + "</TD></TR>");
            }
        }
        catch (Exception e)
        {
            builder.Append(e.ToString() + "</BR>");
        }
        finally
        {
            if (myReader != null)
                myReader.Close();
            if (mojaKonekcija.State == ConnectionState.Open)
                mojaKonekcija.Close();
        }
    }


Korišćenje transakcija

Ukoliko je potrebno da se više SQL komandi izvrše po principu “sve ili ništa”, onda se one izvršavaju u okviru transakcije. Da bi se započela transakcija, potrebno je kreirati objekat SqlTransaction. Objekat SqlTransaction kreira se pozivom metode BeginTransaction odgovarajućeg SqlConnection objekta. Da bi se komanda izvršavala u okviru transakcije odgovarajućem SqlCommand objektu za Transaction svojstvo treba dodeliti prethodno kreiran objekat SqlTransaction. Ukoliko je transakcija uspešno izvršena, poziva se Commit metoda odgovarajućeg SqlTransaction objekta. U protivnom, poziva se Rollback metoda.

public void citaj()
    {
        SqlDataReader myReader = null;
        String konekcioniString = @"Data Source=(local)SQLExpress;Initial Catalog=Northwind;Integrated Security=True";
        SqlConnection mojaKonekcija = new SqlConnection(konekcioniString);
        String mojSelectUpit = "SELECT CustomerID, CompanyName, Address, Phone FROM Customers ";
        SqlCommand mojaSelectKomanda = new SqlCommand(mojSelectUpit, mojaKonekcija);
        try
        {
            mojaKonekcija.Open();
            myReader = mojaSelectKomanda.ExecuteReader();
            builder.Append("<TABLE>");
            builder.Append("<TR><TD>Customer ID</TD>");
            builder.Append("<TD>Company Name</TD></TR>");
            while (myReader.Read())
            {
                builder.Append("<TR><TD>" + myReader["CustomerID"].ToString() + "</TD>");
                builder.Append("<TD>" + myReader["CompanyName"].ToString() + "</TD></TR>");
            }
        }
        catch (Exception e)
        {
            builder.Append(e.ToString() + "</BR>");
        }
        finally
        {
            if (myReader != null)
                myReader.Close();
            if (mojaKonekcija.State == ConnectionState.Open)
                mojaKonekcija.Close();
        }
    }


Smatrate da je ova lekcija korisna?  Preporučite je. Broj preporuka:1


Molimo Vas unesite svoje podatke i dobićete pristup besplatnim lekcijama.

Ime: 
Prezime: 
Email: