Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ADO.NET & DataSet: mini-uputstvo

[es] :: .NET :: ADO.NET & DataSet: mini-uputstvo

[ Pregleda: 11078 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon ADO.NET & DataSet: mini-uputstvo08.08.2002. u 03:10 - pre 263 meseci
ADO.NET Tutorial #1: Rad sa DataSet objektom


Ovaj mini-tutorial uvesce vas u osnove rada sa DataSet objektom, stoga je pozeljno da prije postavljanja pitanja vezano za
rad sa istim procitate ovo uputstvo.
Pozeljno je posedovati osnovno znanje o principima rada sa bazama podataka kao sto su MS Access ili SQL Server.

Sadrzaj:

1. Dataset objekt: uopsteno
2. Rad sa dataset objektom
2.1. Popunjavanje dataset-a podacima iz baze podataka (FILL)
2.2. Uspostavljanje relacija izmedju tabli u datasetu
2.3. Dodavanje row-a u tablu (ADD)
2.4. Izmena postojeceg row-a u tabli (UPDATE)
2.5. Brisanje row-a iz table (DELETE)
2.6. Slanje dataseta nazad u bazu podataka (UPDATE)
2.7. Sortiranje i filtriranje


1. Datasetobjekt: uopsteno.

Dataset objekt predstavlja objekt koji sluzi kao 'lokalna baza podataka' na klijentu. Podaci koje dataset sadrzi nalaze se u memoriji klijenta i sve operacije nad podacima obavljaju se lokalno, sto doprinosi smanjenju opterecenja samog servera.

Priroda rada sa bazama podataka dovela je do ugradjivanja dataset objekta u .NET: u vecini slucajeva, klijenti se povezuju sa serverom u cilju citanja podataka, zatim sledi duzi period kada je nepotrebno odrzavati konekciju sa serverom, a nakon lokalne izmene podataka u dataset-u (dodavanje, izmena, brisanje) podaci se salju nazad serveru koji vrsi neophodne izmene u bazi podataka. Dakle, dataset predstavlja skup podataka koji su OTKACENI (disconnected) od svog izvora. Konekcija sa serverom se uspostavlja preko dataadapter objekta i traje samo kratko vreme dok se podaci citaju, odnosno vracaju nazad u bazu.


2. Rad sa dataset objektom

Dataset objekt se sastoji od tabela, tabele od redova (rows), a redovi dalje sadrze kolone. Za komunikaciju sa bazom podataka koristi se DataAdapter objekt zajedno sa dataset objektom.
Objekti mogu da se kreiraju na dva nacina: rucno (pisanjem koda) i koristenjem Windows Forms Designer-a. Posto Windows Forms Designer u pozadini kreira kod koji se lako moze pogledati (nalazi se u 'sekciji' Windows Forms Designer Generated Code) mi cemo koristiti Windows Forms Designer za kreiranje objekata.

Da krenemo: u projekt dodati formu (Form1) i zatim na formu 'spustiti' SQLDataAdapter (naravno, ukoliko ne koristite SQL Server nego neku drugu bazu podataka, recimo MS Access, potrebno je koristiti OLEDBDataAdapter objekt). SQL ili OLEDBDataAdapter nalaze se u Toolbox-u, u sekciji Data.
Pokrenuce se wizard u kome se prvo odredjuju potrebni parametri za konekciju sa bazom podataka. U ovom primeru koristimo bazu NORTHWIND.
Nakon toga potrebno je odabrati tabelu sa kojom radimo, odnosno potrebno je definisati SQL SELECT izraz. Ovo moze da se unese rucno ili pomocu Query buildera. Za nas primer koristimo sledeci izraz:
SELECT * FROM Customers

Kada zavrsimo, Windows Forms Designer ce da generise potrebne objekte: Connection objekt i DataAdapter objekt, te citav niz objekata koji sluze za manipulaciju sa podacima u Customers tabeli: SQLSelectCommand, SQLInsertCommand, SQLDeleteCommand i SQLUpdateCommand.
Nakon ovog na formu se moze dodati DataSet objekt (tip: UNTYPED Dataset) kao i DataGrid objekt koji cemo koristiti za prikaz podataka.


2.1. Popunjavanje dataset-a podacima iz baze podataka

Na formu dodati dugme (button), promeniti mu ime u Refresh, a zatim dodati sledeci kod u klasu Form1:
Code:

Private Sub Refresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Refresh.Click
DataSet1.Clear() ' brisemo sve podatke iz dataset-a
Try
SqlDataAdapter1.Fill(DataSet1, "Kupci")
Catch ex As System.Data.SqlClient.SqlException ' ili OLEDBClient.OLEDBException
MsgBox(ex.Message) ' prikazujemo poruku ako dodje do greske
End Try
DataGrid1.DataSource = DataSet1.Tables("Kupci")
End Sub


Da vidimo:
SQLDataAdapter1.Fill(DataSet1, "Kupci")
otvara konekciju prema bazi, izvrsava SQL Select upit i popunjava DataSet1. U Dataset-u se kreira tabela sa imenom "Kupci" koja sadrzi podatke. Konekcija sa serverom se automatski zatvara.
Poslednjom linijom podatke iz te tabele prikazujemo u Datagrid objektu.
Na samom pocetku imamo poziv Clear metode kojom brisemo sve podatke iz dataseta kako ne bi doslo do ponavljanja podataka unutar dataseta ako vise puta kliknemo na Refresh dugme.
E sad, dataset moze da sadrzi vise od jedne tabele. Jednostavno ako zelimo da dodamo jos neku tabelu, potrebno je da dodamo novi Dataadapter objekt i da zatim izvrsimo popunjavanje dataseta kao u prethodnom primeru npr.
Code:

    Try
            SqlDataAdapter1.Fill(DataSet1, "Kupci")
            SqlDataAdapter2.Fill(DataSet1, "Narudzbe")
    Catch ex As System.Data.SqlClient.SqlException



2.2. Uspostavljanje relacija izmedju tabela u datasetu

U datasetu je moguce odrediti kako se tabele odnose jedna prema drugoj (relations). Ovo se postize kreiranjem DataRelation objekta koji definise koja kolona (column) u roditeljskoj (parent) tabeli je povezana sa kojom kolonom u child tabeli. Najlakse je da to vidimo na primeru:
Code:

Dim parentCol as DataColumn
Dim childCol as DataColumn
Dim relCustOrder as DataRelation

dataadapter1_titles.Fill(dataset1,"Titles")        ' u dataset dodajemo tabelu Titles i podatke iz iste
dataadapter2_publishers.Fill(dataset1, "Publishers")     ' u dataset dodajemo tabelu Publishers i podatke iz iste
' definisemo relacije izmedju tabela:
parentCol = dataset1.Tables("Publishers").Columns("pub_id")
childCol  = dataset1.Tables("Titles").Columns("pub_id")
relCustOrder = New DataRelation("Titles", parentCol, childCol)
dataset1.Relations.Add(relCustOrder)


Da bi uradili nesto 'pametno' sa ovom relacijom mozemo da se koristimo GetChildRows metodom DataRows objekta. Npr.
Code:

Dim table As DataTable
Dim rows() As DataRow
Dim childRows() As DataRow
Dim i As Integer

table = dataset1.tables("Publishers")
rows =  table.Select("pub_name = '" & strPubName & "'")

If rows.Length = 1 Then
    childRows = rows(0).GETCHILDROWS("Titles")
    For i = 0 To childRows.Length - 1
        msgbox (childrows(i)("Title"))
    Next
End If


2.3. Dodavanje row-a u tabelu (ADD)

Code:

Dim table As DataTable
Dim row As DataRow

table = dataset1.Tables.Item(0)
row   = table.NewRow()

row("author_id") = "eer-4421-aad43"
row("author_name") = "Pera"
row("ugovor") = False
...
table.Rows.Add(row)



2.4. Izmena postojeceg row-a u tabeli (UPDATE)

Potrebno je da se pozicioniramo na zeljeni DataRow i zatim izvrsimo izmene. Npr.:
Code:

Dim i As Integer
Dim table As DataTable
Dim row As DataRow

table = dataset1.Tables.Item(0)
' prolazimo kroz sve Datarow-ove u tabeli i zaustavljamo se na zeljenom, koji onda menjamo
For i = 0 to table.Rows.Count - 1 
    row = table.Rows.Item(i)
    If row("au_name") = "Pera" Then
        row("ugovor") = True
    End If
Next



2.5. Brisanje row-a iz tabele (DELETE)

Isto kao i apdejt datarow-a, samo sto kada se pozicioniramo na odredjeni record, izvrsavamo DELETE metod.
Code:

table = dataset1.Tables.Item(0)
' prolazimo kroz sve Datarow-ove u tabeli i zaustavljamo se na zeljenom koji onda menjamo
For i = 0 to table.Rows.Count - 1 
    row = table.Rows.Item(i)
    If row("au_name") = "Pera" Then
        row.Delete()
    End If
Next



2.6. Slanje dataseta nazad u bazu podataka (UPDATE)

Slanje dataseta nazad serveru gde se onda vrse izmene u bazi podataka izvodi se pozivanjem .Update metode data adaptera. Kada se pozove UPDATE metod adaptera, proverava se RowState svojstvo za svaki datarow u tabeli i na osnovu toga izvrsava odgovarajuca akcija (INSERT, UPDATE ili DELETE). Povratna vrednost je broj row-ova koji su uspesno promenjeni.
Moguce je proveriti da li je uopste bilo promena i ako jeste tek onda pozvati Update metod adaptera (.GetChanges dakle kreira novi Dataset objekt):
Code:

If dataset1.HasChanges() Then
    adapter.Update(dataset1.GetChanges())
End If

odnosno, moguce je slati na promenu samo odgovarajuce datarow-ove:
Code:

adapter.Update(dataset1.GetChanges(DataRowState.Added Or DataRowState.Modified))

U MSDN-u se nalazi objasnjenje za DataRowState enumerator: Added, Modified, Deleted, Detached, Unchanged.

Ponekad je vazno da se operacije izvrsavaju odredjenim redosledom, tada bi koristili nesto poput (iz MSDN-a):
Code:

Dim updTable As DataTable = custDS.Tables("Customers")

' First process deletes.
custDA.Update(updTable.Select(Nothing, Nothing, DataViewRowState.Deleted))

' Next process updates.
custDA.Update(updTable.Select(Nothing, Nothing, DataViewRowState.ModifiedCurrent))

' Finally, process inserts.
custDA.Update(updTable.Select(Nothing, Nothing, DataViewRowState.Added))


Takodje, vredi napomenuti i .HasErrors metod dataset-a koji proverava moguce greske (pozeljno ih je ispraviti pre slanja dataset-a na apdejt).


2.7. Sortiranje i filtriranje

ove operacije se koriste da bi se dakle, sortirali i filtrirali podaci u postojecem dataset-u, bez ponovnog kontaktiranja samog servera.

Code:

table = dataset.tables.item(0)
rows  = table.Select("au_name > 'M'", "au_name ASC")

For i = 0 to rows.Length - 1
    row = rows.GetValue(i)
    Console.WriteLine(" {0} {1}",row("au_name"),row("au_phone"))
Next


I tako, dosli smo do kraja kratkog prirucnika za rad sa DataSet objektom. Naravno ima jos mnooogo toga sto je ostalo 'nepokriveno', medjutim kada se savladaju ovi pocetni koraci, vecina odgovora moze da se nadje koristenjem HELP-a koji dolazi uz VS.NET.
Za ostalo javite :)


Commercial-Free !!!
 
Odgovor na temu

[es] :: .NET :: ADO.NET & DataSet: mini-uputstvo

[ Pregleda: 11078 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.