[ 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.