10. november 2008 - 17:15Der er
5 kommentarer og 1 løsning
Transaction og flere bruger på samtidig
Hej eksperter Jeg har et spørgsmål angående transaction og flere bruger på samtidig.
Beskrivelse:
Jeg har en tabel i en database.
I denne tabel er der en kolonne som hedder rækkefølge(rekkefolge).
Hvis jeg f.eks. sletter et række i tabellen opdateres rækkefølge-feltet i næsten flere andre rækker i tabellen. F.eks. Hvis nu der er 100 rækker og brugeren sletter række 3 så skal der opdateres 96 rækker.
Under denne opdatering(af de 96 rækker) bruger jeg transaction.comit/transaction.rollback.
Spørgsmål:
Hvad nu hvis en bruger i under denne opdatering sletter en af de 96 rækker – går det så ikke galt. Er det nok at bruge transaction?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Men ud fra det du siger med Repeatable Read så lyder det ikke til at det jeg har kodet er godt nok. Hvis f.eks. det er sidste række man sletter så sletter man bare uden transactions.
Der er en del if/else
Her er koden(Spaghettikoden):
kategori kat = new kategori(); object m; SqlConnection Con = new SqlConnection(dbstring); Con.Open(); string cmdstring = "SELECT TOP 1 * FROM kategori WHERE horertil_overkategori ='" + GridView1.DataKeys[e.RowIndex].Values[0].ToString() + "'"; SqlCommand myCommand = new SqlCommand(cmdstring, Con);
//hovedmenu
if (GridView1.DataKeys[e.RowIndex].Values[1].ToString() == "" || GridView1.DataKeys[e.RowIndex].Values[1].ToString()==null) {
m = myCommand.ExecuteScalar();
if (m != null) { alarmen alarm = new alarmen(); alarm.besked("Hovedkategori kan ikke slettes, da der er en underkategori tilknyttet."); Con.Close(); } else {
myCommand.CommandText = "SELECT COUNT(nogle) FROM kategori WHERE horertil_overkategori IS NULL";
myCommand.CommandText = "IF EXISTS (SELECT TOP 1 * FROM kunstner WHERE kategori='" + GridView1.DataKeys[e.RowIndex].Values[0].ToString() + "') select 'Der er bruger' ELSE DELETE FROM kategori WHERE nogle='" + GridView1.DataKeys[e.RowIndex].Values[0].ToString() + "'";
m = myCommand.ExecuteScalar();
if (m != null) { alarmen alarm = new alarmen(); alarm.besked("Kategori kan ikke slettes da der er en kunstner tilknyttet."); Con.Close(); }
Jeg googlede "transaction isolation level" og har kunne læse mig frem til at jeg skal bruge isolation level "SERIALIZABLE" hvilke hverken giver bruger udenfor trancaction'en indsætte eller opdatere.
Tak for input - kast et svar ind - så du kan få dine point...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.