UVOD
Jedan od najznačajnijih fenomena u relacijskim bazama podataka je uzajamna zavisnost tabela na principu Master/Detail. Klijent aplikacije koje koriste ovu značajku implementiraju je na različite načine. Izlaskom Visual Studio 2005 Microsoft je ponudio efikasnu manipulaciju sa bazama podataka sa DataSet klasama. Postoji nekoliko limitirajućih faktora s kojim se susreću programeri razvijajući aplikacije ovom tehnologijom, a to su:
- Potrebna je posebna implementacija zapisa podataka iz DataSet-a u bazu podataka, u slučaju da se radi o Master/Detail relaciju izmedju tabela.
- Potrebna je posebna implementacija transakcijskih zapisa podataka iz više tabela.
Ova dva limitirajuća faktora, otklonjena su novom verzijom Visual Studia 2008, i to dodatnom klasom TableAdapterManager koju generiše Visual Studio prilikom importovanja više od jedne tabele u DataSet. To prosto znači da ova klasa nije dio .NET Frameworka, nego je čista nadogradnja dizajnera u Visual Studiu.
U narednom tekstu kroz primjer upoznat ćemo se sa novim proširenjem u Visula Studio 2008, te implementirati hijearhijski zapis relacijskih tabela iz DataSet-a u bazu podataka. Takodjer, ovom implementacijom ostvaren je transakcijski zapis podataka, što znači da ako zapis ne prođe u najmanje jednoj tabeli, cijeli zapis se vraća na prvobitno stanje odnosno transakcija poziva svoji članicu Roolback koja vraća stanje na prvobitno.
Klasa TableAdapterManager
Visual Studio pored generiranja klasa DataSet i korespodentnih klasa DataAdaptera za svaku importovanu tabelu, generira jos jednu klasu koja upravlja transakcijama svih tabela u DataSetu. Ovo znači da ako želimo pohraniti podatke iz klijent aplikacije u bazu podataka u kojoj je implementrana Master/Detail arhitektura, ova klasa putem članice UpdateAll() hiearhijski pohranjuje podatke.
Ova klasa posjeduje nekoliko članica pomoću kojih se ostvaruje ovaj mehanizam.
- UpdateAll – članica čijim pozivom ostvarujemo hijearhijsko pohranjivanje podataka
- UpdateDeletedRow, UpdateInsertedRow, UpdateUpdatedRow – pomoćne članice koje parcijalno pohranjuju podatke u bazu.
- UpdateOrder – enumeracija koja mijenja poredak izvršavanja pohranjivanja u bazu podataka. Posjeduje dva člana : InsertUpdateDelete i UpdateInsertDelete.
- BackupDataSetBeforeUpdate – osobina kojom obezbjedjujemo da izvršimo sigurnosnu kopiju podataka prije pohranjivanja u bazu. Ovo je osobina koja nam obezbjedjuje da u slučaju neuspjeha podatke u DataSetu vratimo na početak i eventualno ispravilo kolizije koje onemogućuju siguran zapis u bazu podataka.
Primjer TransactionDataSet
- Pokrenuti VS 2008 beta 2. Ako ne posjedujete ovu verziju možete je skinuti odavde.
- Formirajte novi projekat C# Windows Application
- Iz solution explorera dodajte novu stavku (DataSet komponentu) u novo formirani projekat.
- Povezite se sa SQLExpress serverom te napravite konekciju sa NorthWind bazom podataka. Ako ne posjedujete NorthWind bazu podataka možete je skinuti odavde.
Importujte Tabele Customers, Orders, OrderDetails, kako je prikazano nadonjoj slici.
Duplim klikom na relacije koje povezuju tabele Customers-Orders i Orders–OrdersDetail, pokazuje se dijaloški okvir za postavljanje relacija između tabela. Postavite relacije za oba slučaja kao što to pokazuje naredna slika.
Nakon podešavanja klase DataSet, otvorimo datoteku Form1.cs, i iz DataSource usidrenog prozora odvucimo prvo tabelu Customers, pa Orders i na kraju OrderDetail, kao na slici:
Otvorite datoteku izvornog koda ove forme te poredajte Fill metode kao što je to prikazano na sljedećoj slici. Napomena poredak punjenja tabela u hijearhiji je vrlo važna jer bi inače aplikacija izbacila izuzetak.
Takodjer modifikujte dogadjaj SaveItem_Click kaona slici.
Nakon ove implementacije hijearhijski zapis u bazu podataka iz DataSet klase je potpuno obezbjedjen, kao i transakcije.
U VS 2005, ovakva implementacije nije jednostava, i zahtjeva dodatnu implementaciju metoda i klasa. U jednom od narednih postova biće prikazana implementacija Transakcija u VS 2005 korištenjem DataAdaptera i DataSet klasa.
Izvorni kod za ovaj primjer možete skinuti odavde.