[ Astek @ 17.11.2007. 08:53 ] @
| Ovako,
pristupam nekom zapisu iz koda. Npr:
Code:
Dim ds as new Dataset
Dim da as new sqlClient.SqlDataAdapter
Dim cmd As New...
...
...
Dim strSql As string
strSql="SELECT .... WHERE ID=1" - IZDVAJA SAMO 1 ZAPIS
cmd.Connection=conn
.......
da.Fil(ds, "TABELA")
.......
Kako drugim korisnicima staviti do znanja da se izdvojeni record trenutno obrađuje (bez uvođenja dodatnih polja u tbl u bazi)?
[Shadowed: dodati [code] tagovi.]
[Ovu poruku je menjao Shadowed dana 17.11.2007. u 11:53 GMT+1] |
[ Astek @ 17.11.2007. 09:02 ] @
Da malo skratim...
U stvari želim da iz koda zaključam tačno jedan record, obavim posao i posle ga otključam?
Takođe želim da iz koda proverim da li je neki rekord zaključan.
[ bjevta @ 18.11.2007. 07:09 ] @
može biti da neću biti od neke pomoći ali, moj odgovor je - nikako. Barem ja ne znam kako.
naime, u ado.net se koristi (barem ja koristim) tzv. "optimistic locking" što se svodi na to da svako u data set-u menja šta mu je volja, a kod update-a se detektuje nešto tipa da li je "dataset.original row = database.current row". ako jeste, update se izvrši i to je to. ako nije, okida se odgovarajući exception, koji ukazuje da je neko menjao taj record u međuvremenu, pa aplikacija mora da razreši konflikt. Problematika se komplikuje ako treba da se izvrši update u više tabela data set-a u istoj transakciji.
S druge strane, uvek sam imao neki način da izbegnem konkurentni update nad istom vrstom: jedan korisnik je zadužen za jednu tabelu, ostali je samo čitaju. Ako i rade istovremeno nad istom tabelom, onda rade samo insert. Ili, ako i rade update, nema šanse da update-uju isti slog u istom trenutku. To sam definisao u fazi logičkog dizajna baze.
Jedino što bih mogao da predložim jeste da proveriš koliko je zaista verovatno da će 2+ korisnika istovremeno "napasti" isti record. Pre toga proveri koliko je zaista potrebno da više ljudi petlja nad istim podacima - proveri business use case.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.