webForumDet fria alternativet

Förklaring till Isolation-level...?

.NET

2 svar · 227 visningar · startad av fredrik

Medlem sedan dec. 19991 072 inlägg
Frågan#1

Jag hämtar och uppdaterar data mha en adapter och en SQLCommandBuilder.

För att låsa tabellen så använder jag ett transaktions-objekt med Isolationlevel Serializable.

Detta fungerar alldeles utmärkt, förutom att jag inte riktigt förstår varför.

Först använde jag ett transaktions-objekt utan att ange någon isolation-level. Resultatet blev att när jag test-körde i QA (under transaktionen) så kunde jag gör INSERT med inte SELECT.

När jag nu istället kör med Serializable så kan jag från QA göra SELECT med inte INSERT, vilket också är helt rätt.

Frågan är alltså varför?

Enligt VS-hjälpen står det för "Serializable":

A range lock is palced on the DataSet, preventing other users from updating or inserting rows into the dataset until the transaction is complete.

Själv tolkar jag detta med att just ett "Range lock", dvs. den låser bara de rader jag jobbar med, vilket borde resultera i att andra användare får göra INSERT/UPDATE/DELETE på andra rader, men inte på de raderna jag jobbar med.

Eller är det fel-tolkat?

(Hur som helst så funkar ju allt som det ska nu...)

Medlem sedan nov. 2003569 inlägg
#2

Hmm, IsolationLevel.Serializable har nåt att göra med säkerheten, att inga andra surfare får tillgång till databasen förrän du är klar med din transaction, serializable är den säkraste att använda.

Medlem sedan dec. 19991 072 inlägg
#3

Jo...så långt är jag också med att det är den säkraste. Men enligt dokumentationen så ska den ju bara låsa de raderna jag jobbar med, men i själva verket så låser hela tabellen sig (då jag inte kan göra INSERT).

263 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)