obrada transakcija u ado.net-u - mikroknjiga.rs · se na transakciji trnmaster pravi druga,...

20
109 Obrada transakcija u ADO.NET-u U nekoliko poslednjih poglavlja videli smo kako prilikom menjanja i ažuriranja podataka, objekti ADO.NET snabdevača podataka međuso- bno utiču jedan na drugog. U ovom poglavlju završićemo izlaganje o ADO.NET snabdevačima podataka tako što ćemo istražiti kako se obrađuju transakcije. Transakcije Transakcija je serija akcija koje se moraju posmatrati kao jedna celi- na—akcije moraju ili da sve uspeju, ili da ne uspe nijedna. Klasičan primer transakcije predstavlja prenos novca sa jednog bankovnog raču- na na drugi. Da bi se novac preneo, željeni iznos, od recimo 100 dinara, podigne se sa jednog računa i položi na drugi. Kad bi se desilo da podi- zanje novca uspe, a polaganje ne uspe, novac bi zauvek nestao. Kad bi uspelo polaganje, ali ne i podizanje, novac bi bio izmišljen. Jasno je da u slučaju da jedna od akcija ne uspe, moraju da ne uspeju obe akcije. ADO.NET podržava transakcije korišćenjem objekta Transaction, koji se pravi na otvorenoj konekciji. Komande koje se na transakciji izvrše dok je transakcija u toku moraju se upisati u transakciju tako što će se njihovom svojstvu Transaction dodeliti referenca na objekat Transac- U ovoj lekciji naučićete kako da: Napravite transakciju Napravite ugneženu transakciju Potvrdite transakciju Poništite transakciju Obrada transakcija u ADO.NET-u POGLAVLJE 5

Upload: others

Post on 11-Sep-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

109

Obrada transakcija u ADO.NET-u

U nekoliko poslednjih poglavlja videli smo kako prilikom menjanja iažuriranja podataka, objekti ADO.NET snabdevača podataka međuso-bno utiču jedan na drugog. U ovom poglavlju završićemo izlaganje oADO.NET snabdevačima podataka tako što ćemo istražiti kako seobrađuju transakcije.

TransakcijeTransakcija je serija akcija koje se moraju posmatrati kao jedna celi-na—akcije moraju ili da sve uspeju, ili da ne uspe nijedna. Klasičanprimer transakcije predstavlja prenos novca sa jednog bankovnog raču-na na drugi. Da bi se novac preneo, željeni iznos, od recimo 100 dinara,podigne se sa jednog računa i položi na drugi. Kad bi se desilo da podi-zanje novca uspe, a polaganje ne uspe, novac bi zauvek nestao. Kad biuspelo polaganje, ali ne i podizanje, novac bi bio izmišljen. Jasno je dau slučaju da jedna od akcija ne uspe, moraju da ne uspeju obe akcije.

ADO.NET podržava transakcije korišćenjem objekta Transaction, kojise pravi na otvorenoj konekciji. Komande koje se na transakciji izvršedok je transakcija u toku moraju se upisati u transakciju tako što će senjihovom svojstvu Transaction dodeliti referenca na objekat Transac-

U ovoj lekciji naučićete kako da:

✔ Napravite transakciju

✔ Napravite ugneženu transakciju

✔ Potvrdite transakciju

✔ Poništite transakciju Obr

ada

tran

sakc

ija

u A

DO

.NET

-u

POGLAVLJE

5

Poglavlje 5.fm Page 109 Monday, April 15, 2002 8:27 AM

Page 2: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

110 Microsoft ADO.NET Korak po korak

tion. Komande se ne mogu izvršavati na konekciji izvan transakcije u trenut-ku dok je neka transakcija otvorena.

Ako se transakcija potvrdi, sve komande koje čine deo te transakcije trajnoće se upisati u izvor podataka. Ako se transakcija poništi, sve komande će bi-ti odbačene u izvoru podataka.

Pravljenje transakcijaObjekat Transaction implementiran je kao deo snabdevača podataka. Pos-toji posebna verzija za svaki od postojećih snabdevača podataka: OleDb-Transaction u prostoru imena System.Data.OleDb i SqlTransaction u pro-storu imena System.Data.SqlClient.

Objekat SqlTransaction implementiran je korišćenjem Microsoft SQL Serv-erovih transakcija —pravljenje objekta SqlTransaction preslikava se direkt-no na naredbu BeginTransaction. Objekat OleDbTransaction implemen-tiran je unutar OLE DB-a. Bez obzira na to koji snabdevač podatakakoristite, nikada ne bi trebalo da na bazi podataka izvršavate naredbu Be-ginTransaction.

Pravljenje novih transakcijaTransakcije se prave pozivom metoda BeginTransaction objekta Connec-tion, koji vraća referencu na objekat Transaction. Metod BeginTransactionje preopterećen, čime se dozvoljava da opciono specifikujete svojstvo Isola-tionLevel, kao što je prikazano u tabeli 5-1. Konekcija mora biti valjana iotvorena prilikom poziva metoda BeginTransaction.

Tabela 5-1 Metodi BeginTransaction objekta Connection

Pošto SQL Server podržava imenovane transakcije, snabdevač podataka Sql-Client sadrži dve dodatne verzije metoda BeginTransaction, kao što je prika-zano u tabeli 5-2.

Metod Opis

BeginTransac-tion()

Počinje transakciju.

BeginTransac-tion(Isolation-Level)

Počinje transakciju sa specifikovanim nivoom izolo-vanja IsolationLevel.

Poglavlje 5.fm Page 110 Monday, April 15, 2002 8:27 AM

Page 3: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

Poglavlje 5 Obrada transakcija u ADO.NET-u 111

Obr

ada

tran

sakc

ija

u A

DO

.NET

-u5

Tabela 5-2 Dodatni metodi BeginTransaction za SQL Server

Opcioni parametar IsolationLevel metoda BeginTransaction određuje po-našanje konekcije u odnosu na zaključavanje (engl. lock). Moguće vrednostiparametra IsolationLevel prikazane su u tabeli 5-3.

Tabela 5-3 Nivoi izolovanja

Metod Opis

BeginTransac-tion(Transac-tionName)

Počinje transakciju sa imenom specifikovanim znak-ovnim nizom TransactionName.

BeginTransac-tion(Isolation-Level, Transaction-Name)

Počinje transakciju sa specifikovanim nivoom izolo-vanja IsolationLevel i imenom specifikovanim znak-ovnim nizom TransactionName.

ADOZa razliku od ADO-a, metodi Commit i RollBack su u ADO.NET-u smešte-ni u objekat Transaction, a ne u objekat Command.

Vrednost Značenje

Chaos Izmene na čekanju iz viših rangiranih transakcija koje su u toku ne mogu se prepisati.

ReadCommited Deljena zaključavanja se čuvaju prilikom čitanja poda-taka, ali se podaci mogu izmeniti pre kraja transakcije.

ReadUncom-mited

Ne postavljaju se nikakva deljena zaključavanja niti se zahtevaju bilo kakva ekskluzivna zaključavanja.

Repeat-ableRead

Eksluzivna zaključavanja smeštaju se na sve podatke koji se koriste u upitu.

Serializable Zaključavanje na nivou opsega smešta se na objekat DataSet.

Unspecified Postojeći nivo izolacije ne može se odrediti.

Poglavlje 5.fm Page 111 Monday, April 15, 2002 8:27 AM

Page 4: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

112 Microsoft ADO.NET Korak po korak

Napravite novu transakciju

Visual Basic .NET 1 Otvorite projekat Transactions ili iz početne stranice Visual Studia ili ko-

rišćenjem menija Open.

2 U Solution Exploreru izaberite sa dva uzastopna pritiska na taster mišaTransactions.vb da biste otvorili obrazac u dizajneru obrazaca.

3 Dva puta uzastopno pritisnite mišem dugme Create.

Visual Studio otvara prozor za uređivanje koda i dodaje rukovaocadogađaja Click.

4 Sledeći kod dodajte u proceduru:

Dim strMsg As String

Dim trnNew As System.Data.OleDb.OleDbTransaction

Me.cnAccessNwind.Open()

trnNew = Me.cnAccessNwind.BeginTransaction()

strMsg = "Isolation Level: "

strMsg += trnNew.IsolationLevel.ToString()

MessageBox.Show(strMsg)

Me.cnAccessNwind.Close()

Ovim kodom se korišćenjem podrazumevanog načina pravi novi objekatTransaction, a zatim njegov nivo izolovanosti prikazuje u okviru za poruku.

Poglavlje 5.fm Page 112 Monday, April 15, 2002 8:27 AM

Page 5: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

Poglavlje 5 Obrada transakcija u ADO.NET-u 113

Obr

ada

tran

sakc

ija

u A

DO

.NET

-u5

5 Pritisnite taster F5 da biste pokrenuli aplikaciju.

6 Pritisnite mišem dugme Load Data.

Aplikacija popunjava objekat DataSet i prikazuje liste Customers i Orders.

7 Pritisnite mišem dugme Create.

Aplikacija prikazuje nivo izolovanosti transakcije u okviru za poruku.

Poglavlje 5.fm Page 113 Monday, April 15, 2002 8:27 AM

Page 6: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

114 Microsoft ADO.NET Korak po korak

8 Pritisnite mišem dugme OK u okviru za poruku, a zatim zatvorite aplikaciju.

Visual C# .NET

1 Otvorite projekat Transactions ili iz početne stranice Visual Studia ili ko-rišćenjem menija Open.

2 U Solution Exploreru izaberite sa dva uzastopna pritiska na taster mišaTransactions.cs da biste otvorili obrazac u dizajneru obrazaca.

3 Dva puta uzastopno pritisnite mišem dugme Create.

Visual Studio otvara prozor za uređivanje koda i dodaje rukovaocadogađaja Click.

Poglavlje 5.fm Page 114 Monday, April 15, 2002 8:27 AM

Page 7: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

Poglavlje 5 Obrada transakcija u ADO.NET-u 115

Obr

ada

tran

sakc

ija

u A

DO

.NET

-u5

4 Sledeći kod dodajte u proceduru:

string strMsg;

System.Data.OleDb.OleDbTransaction trnNew;

this.cnAccessNwind.Open();

trnNew = this.cnAccessNwind.BeginTransaction();

strMsg = "Isolation Level: ";

strMsg += trnNew.IsolationLevel.ToString();

MessageBox.Show(strMsg);

this.cnAccessNwind.Close();

Ovim kodom se korišćenjem podrazumevanog načina pravi novi objekatTransaction, a zatim njegov nivo izolovanosti prikazuje u okviru za poruku.

5 Pritisnite taster F5 da biste pokrenuli aplikaciju.

6 Pritisnite mišem dugme Load Data.

Aplikacija popunjava objekat DataSet i prikazuje liste Customers i Orders.

Poglavlje 5.fm Page 115 Monday, April 15, 2002 8:27 AM

Page 8: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

116 Microsoft ADO.NET Korak po korak

7 Pritisnite mišem dugme Create.

Aplikacija prikazuje nivo izolovanosti transakcije u okviru za poruku.

8 Pritisnite mišem dugme OK u okviru za poruku, a zatim zatvorite aplikaciju.

Pravljenje ugneždenih transakcija

Iako nije moguće da na jednom objektu Connection istovremeno postoje dve transakcije, objekat OleDbTransaction podržava ugneždene transakcije. (One nisu podržane na SQL Serveru.)

Sintaksa za pravljenje ugneždenih transakcija potpuno je ista kao i za pravl-jenje transakcija prvog nivoa, kao što je prikazano u tabeli 5-4. Razlika je utome što se ugneždene transakcije prave pozivom metoda BeginTransactionna samom objektu Transaction, a ne na objektu Connection.

Sve ugneždene transakcije se moraju potvrditi ili poništiti pre nego što sepotvrdi transakcija koja ih sadrži; međutim, ako se roditeljska (ona kojasadrži ostale) transakcija poništi, ugneždene transakcije će se takođe poništi-ti, čak i u slučaju da su prethodno već bile potvrđene.

ADODok je u ADO-u bilo podržano više transakcija na jednom objektu Connec-tion, u ADO.NET-u to nije slučaj.

Poglavlje 5.fm Page 116 Monday, April 15, 2002 8:27 AM

Page 9: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

Poglavlje 5 Obrada transakcija u ADO.NET-u 117

Obr

ada

tran

sakc

ija

u A

DO

.NET

-u5Tabela 5-4 Metodi BeginTransaction objekta Transaction

Napravite ugneždenu transakciju

Visual Basic .NET

1 Iz liste ClassName izaberite btnNested, a zatim iz liste MethodName izaber-ite Click.

Visual Studio otvara šablon rukovaoca događaja Click.

2 U proceduru dodajte sledeći kod:

Dim strMsg As String

Dim trnMaster As System.Data.OleDb.OleDbTransaction

Dim trnChild As System.Data.OleDb.OleDbTransaction

Me.cnAccessNwind.Open()

trnMaster = Me.cnAccessNwind.BeginTransaction()

trnChild = trnMaster.Begin()

strMsg = "Child Isolation Level: "

strMsg += trnChild.IsolationLevel.ToString()

MessageBox.Show(strMsg)

Me.cnAccessNwind.Close()

U kodu se prvo pravi transakcija, trnMaster, na objektu Connection. Zatimse na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i uokviru za poruku prikazuje njen nivo izolovanosti.

3 Pritisnite taster F5 da biste pokrenuli aplikaciju.

4 Pritisnite mišem dugme Load Data.

5 Pritisnite mišem dugme Nested.

Aplikacija prikazuje nivo izolovanosti ugneždene transakcije u okviru zaporuku.

Metod Opis

BeginTransac-tion()

Počinje transakciju.

BeginTransac-tion(Isolation-Level)

Počinje transakciju sa specifikovanim nivoom izolova-nja IsolationLevel.

Poglavlje 5.fm Page 117 Monday, April 15, 2002 8:27 AM

Page 10: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

118 Microsoft ADO.NET Korak po korak

6 Pritisnite mišem dugme OK u okviru za poruku, a zatim zatvorite aplikaciju.

Visual C# .NET

1 Sledeću proceduru dodajte u kod:

private void btnCreate_Click(object sender, System.EventArgs e)

{

string strMsg;

System.Data.OleDb.OleDbTransaction trnNew;

this.cnAccessNwind.Open();

trnNew = this.cnAccessNwind.BeginTransaction();

strMsg = "Isolation Level: ";

strMsg += trnNew.IsolationLevel.ToString();

MessageBox.Show(strMsg);

this.cnAccessNwind.Close();

}

U kodu se prvo pravi transakcija, trnMaster, na objektu Connection. Zatimse na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i uokviru za poruku prikazuje njen nivo izolovanosti.

2 Dodajte kod za povezivanje prethodnog rukovaoca događaja na početakprocedure frmTransactions():

this.btnNested.Click += new EventHandler(this.btnNested_Click);

Poglavlje 5.fm Page 118 Monday, April 15, 2002 8:27 AM

Page 11: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

Poglavlje 5 Obrada transakcija u ADO.NET-u 119

Obr

ada

tran

sakc

ija

u A

DO

.NET

-u5

3 Pritisnite taster F5 da biste pokrenuli aplikaciju.

4 Pritisnite mišem dugme Load Data.

5 Pritisnite mišem dugme Nested.

Aplikacija prikazuje nivo izolovanosti ugneždene transakcije u okviru zaporuku.

6 Pritisnite mišem dugme OK u okviru za poruku, a zatim zatvorite aplikaciju.

Korišćenje transakcija Pošto se transakcije naprave, potrebno je da se obave tri koraka da bi se mo-gle koristiti. Prvo se transakcije dodeljuju komandama koje će u njimaučestvovati, zatim se komande izvršavaju i na kraju se transakcije zatvarajuili njihovim izvršavanjem ili vraćanjem u pređašnje stanje.

Dodeljivanje transakcija objektu Command Jednom kada se na konekciji otpočne transakcija, sve komande koje se iz-vršavaju na toj konekciji moraju da učestvuju u toj transakciji. Nažalost,ovo se ne dešava automatski—potrebno je da svojstvu Transaction objektaCommand dodelite referencu na tu transakciju.

Međutim, kada se transakcija jednom potvrdi ili poništi, referenca na tran-sakciju u svim komandama koje učestvuju u transakciji ponovo će se postav-iti na vrednost Nothing, tako da nije potrebno da i ovaj korak obavljateručno.

Poglavlje 5.fm Page 119 Monday, April 15, 2002 8:27 AM

Page 12: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

120 Microsoft ADO.NET Korak po korak

Potvrđivanje i poništavanje transakcija Poslednji korak u obradi transakcija je da se izmene napravljene koman-dama koje učestvuju u transakciji potvrde ili ponište. Ako se transakcijapotvrdi, sve izmene će se prihvatiti u izvoru podataka. Ako se poništi, sveizmene će se odbaciti i izvor podataka će se vratiti u stanje u kojem senalazio pre početka transakcije.

Transakcije se potvrđuju korišćenjem metoda Commit objekta Transaction,a poništavaju korišćenjem metoda Rollback objekta Transaction. Nijedanod ova dva metoda nema nikakve parametre. Ove akcije se obično nalaze ubloku Try ... Catch.

Potvrdite transakciju

Visual Basic .NET

1 Iz liste ClassName izaberite btnCommit, a zatim iz liste MethodName iza-berite Click.

Visual Studio otvara šablon rukovaoca događajem Click.

2 U proceduru dodajte sledeći kôd:

Dim trnNew As System.Data.OleDb.OleDbTransaction

AddRows("AAAA1")

Me.cnAccessNwind.Open()

trnNew = Me.cnAccessNwind.BeginTransaction()

Me.daCustomers.InsertCommand.Transaction = trnNew

Me.daOrders.InsertCommand.Transaction = trnNew

Try

Me.daCustomers.Update(Me.dsCustomerOrders1.CustomerList)

Me.daOrders.Update(Me.dsCustomerOrders1.Orders)

trnNew.Commit()

MessageBox.Show("Transaction Committed")

Catch err As System.Data.OleDb.OleDbException

trnNew.Rollback()

MessageBox.Show(err.Message.ToString())

Finally

Me.cnAccessNwind.Close()

End Try

Procedura AddRows, koji je obezbeđen još u poglavlju 1, dodaje red po-trošača u tabelu Customers i porudžbinu za tog potrošača u tabelu Order.

U bloku Try ... Catch najpre se, pod uslovom da uspeju, izvršavaju dve ko-mande Update, a zatim prikazuje poruka koja potvrđuje da se transakcijazavršila bez grešaka.

Poglavlje 5.fm Page 120 Monday, April 15, 2002 8:27 AM

Page 13: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

Poglavlje 5 Obrada transakcija u ADO.NET-u 121

Obr

ada

tran

sakc

ija

u A

DO

.NET

-u5

3 Pritisnite taster F5 da biste pokrenuli aplikaciju.

4 Pritisnite mišem Load Data.

Aplikacija popunjava objekat DataSet i prikazuje liste Customers i Orders.

5 Pritisnite mišem dugme Commit.

Aplikacija prikazuje okvir za poruku koji potvrđuje da su ažuriranja uspešnoobavljena.

6 Pritisnite mišem dugme OK iz okvira za poruku, a zatim pritisnite mišemdugme Load Data da biste se uverili da su redovi zaista umetnuti.

7 Zatvorite aplikaciju.

Poglavlje 5.fm Page 121 Monday, April 15, 2002 8:27 AM

Page 14: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

122 Microsoft ADO.NET Korak po korak

Visual C# .NET

1 Sledeću proceduru dodajte u kod:

private void btnCommit_Click(object sender, System.EvantArgs e)

{

System.Data.OleDb.OleDbTransaction trnNew;

AddRows("AAAA1");

this.cnAccessNwind.Open();

trnNew = this.cnAccessNwind.BeginTransaction();

this.daCustomers.InsertCommand.Transaction = trnNew;

this.daOrders.InsertCommand.Transaction = trnNew;

try

{

this.daCustomers.Update(this.dsCustomerOrders1.CustomerList);

this.daOrders.Update(this.dsCustomerOrders1.Orders);

trnNew.Commit();

MessageBox.Show("Transaction Committed");

}

catch (System.Data.OleDb.OleDbException err)

{

trnNew.Rollback();

MessageBox.Show(err.Message.ToString());

}

finally

{

this.cnAccessNwind.Close();

}

}

Procedura AddRows, koji je obezbeđen još u poglavlju 1, dodaje redpotrošača u tabelu Customers i porudžbinu za tog potrošača u tabeluOrder.

U bloku Try ... Catch najpre se, pod uslovom da uspeju, izvršavaju dvekomande Update, a zatim prikazuje poruka koja potvrđuje da je transakcijazavršena bez grešaka.

2 Dodajte kod za povezivanje prethodnog rukovaoca događaja na početakprocedure frmTransactions():

this.btnCommit.Click += new EventHandler(this.btnCommit_Click);

3 Pritisnite taster F5 da biste pokrenuli aplikaciju.

Poglavlje 5.fm Page 122 Monday, April 15, 2002 8:27 AM

Page 15: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

Poglavlje 5 Obrada transakcija u ADO.NET-u 123

Obr

ada

tran

sakc

ija

u A

DO

.NET

-u5

4 Pritisnite mišem Load Data.

Aplikacija popunjava objekat DataSet i prikazuje liste Customers i Orders.

5 Pritisnite mišem dugme Commit.

Aplikacija prikazuje okvir za poruku koji potvrđuje da su ažuriranja uspešnoobavljena.

6 Pritisnite mišem dugme OK iz okvira za poruku, a zatim pritisnite mišemdugme Load Data da biste se uverili da su redovi zaista umetnuti.

7 Zatvorite aplikaciju.

Poglavlje 5.fm Page 123 Monday, April 15, 2002 8:27 AM

Page 16: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

124 Microsoft ADO.NET Korak po korak

Poništite transakciju

Visual Basic .NET

1 Iz liste ClassName izaberite btnRollBack, a zatim iz liste MethodName iz-aberite Click.

Visual Studio otvara šablon rokovaoca događaja Click.

2 U proceduru dodajte sledeći kod:

Dim trnNew As System.Data.OleDb.OleDbTransaction

AddRows("AAAA2")

Me.cnAccessNwind.Open()

trnNew = Me.cnAccessNwind.BeginTransaction()

Me.daCustomers.InsertCommand.Transaction = trnNew

Me.daOrders.InsertCommand.Transaction = trnNew

Try

Me.daOrders.Update(Me.dsCustomerOrders1.Orders)

Me.daCustomers.Update(Me.dsCustomerOrders1.CustomerList)

trnNew.Commit()

MessageBox.Show("Transaction Committed")

Catch err As System.Data.OleDb.OleDbException

trnNew.Rollback()

MessageBox.Show(err.Message.ToString())

Finally

Me.cnAccessNwind.Close()

End Try

Ova procedura je gotovo identična sa procedurom Commit iz prethodnevežbe. Međutim, pošto je redosled ažuriranja obrnut tako da se sadaporudžbina dodaje pre potrošača, prva naredba Update neće uspeti i okvirza poruku će prikazati grešku.

3 Pritisnite taster F5 da biste pokrenuli aplikaciju.

4 Pritisnite mišem Load Data.

Aplikacija popunjava objekat DataSet i prikazuje liste Customers i Orders.

Poglavlje 5.fm Page 124 Monday, April 15, 2002 8:27 AM

Page 17: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

Poglavlje 5 Obrada transakcija u ADO.NET-u 125

Obr

ada

tran

sakc

ija

u A

DO

.NET

-u5

5 Pritisnite mišem dugme RollBack.

Aplikacija prikazuje okvir za poruku koji objašnjava grešku.

6 Pritisnite mišem dugme OK iz okvira za poruku, a zatim pritisnite mišemdugme Load Data da biste se uverili da su redovi zaista umetnuti.

7 Zatvorite aplikaciju.

Poglavlje 5.fm Page 125 Monday, April 15, 2002 8:27 AM

Page 18: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

126 Microsoft ADO.NET Korak po korak

Visual C# .NET

1 Sledeću proceduru dodajte u kod:

private void btnRollbackžClick(object sender, System.EventArgs e)

{

System.Data.OleDb.OleDbTransaction trnNew;

AddRows("AAAA2");

this.cnAccessNwind.Open();

trnNew = this.cnAccessNwind.BeginTransaction();

this.daCustomers.InsertCommand.Transaction = trnNew;

this.daOrders.InsertCommand.Transaction = trnNew;

try

{

this.daOrders.Update(this.dsCustomerOrders1.Orders);

this.daCustomers.Update(this.dsCustomerOrders1.CustomerList);

trnNew.Commit();

MessageBox.Show("Transaction Committed");

}

catch (System.Data.OleDb.OleDbException err)

{

trnNew.Rollback();

MessageBox.Show(err.Message.ToString());

}

finally

{

this.cnAccessNwind.Close();

}

}

Ova procedura je gotovo identična sa procedurom Commit iz prethodnevežbe. Međutim, pošto je redosled ažuriranja obrnut tako da se sadaporudžbina dodaje pre potrošača, prva naredba Update neće uspeti i okvirza poruku će prikazati grešku.

2 Dodajte kod za povezivanje prethodnog rukovaoca događaja na početakprocedure frmTransactions():

this.btnRollback.Click += new EventHandler(this.btnRollback_Click);

3 Pritisnite taster F5 da biste pokrenuli aplikaciju.

4 Pritisnite mišem Load Data.

Aplikacija popunjava objekat DataSet i prikazuje liste Customers i Orders.

Poglavlje 5.fm Page 126 Monday, April 15, 2002 8:27 AM

Page 19: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

Poglavlje 5 Obrada transakcija u ADO.NET-u 127

Obr

ada

tran

sakc

ija

u A

DO

.NET

-u5

5 Pritisnite mišem dugme RollBack.

Aplikacija prikazuje okvir za poruku koji objašnjava grešku.

6 Pritisnite mišem dugme OK iz okvira za poruku, a zatim pritisnite mišemdugme Load Data da biste se uverili da su redovi zaista umetnuti.

7 Zatvorite aplikaciju.

Poglavlje 5.fm Page 127 Monday, April 15, 2002 8:27 AM

Page 20: Obrada transakcija u ADO.NET-u - mikroknjiga.rs · se na transakciji trnMaster pravi druga, ugneždena transakcija, trnChild i u okviru za poruku prikazuje njen nivo izolovanosti

128 Microsoft ADO.NET Korak po korak

Brzi pregled poglavlja 5 Da biste Uradite sledeće

Napravili transakciju Pozovite metod BeginTransaction objekta Con-nection:

myTrans = myConn.BeginTransaction

Napravili ugneždenu transakciju

Pozovite metod BeginTransaction objekta Trans-action:

nestedTrans = myTrans.BeginTransaction

Potvrdili transakciju Pozovite metod Commit objekta Transaction:

myTrans.Commit()

Poništili transakciju Pozovite metod RollBack objekta Transaction:

myTrans.RollBack()

Poglavlje 5.fm Page 128 Monday, April 15, 2002 8:27 AM