Forum: ADO.NET |
Thema:
Isolationsstufen bei Transaktionen |
Von:
Stephanie Hölzl (
15.06.2004 17:08) |
Hallo,
ich beisse mir gerade die Zähne an den Isolationsstufen aus. Ich benötige ein Beispiel um die Auswirkungen der verschiedenen Isolationsstufen zu demonstrieren. Dabei habe ich mir überlegt, auf einem Formular zwei DataGrids zu hinterlegen mit jeweils den Schaltflächen Laden, Speichern und Commit. Jedes Grid hat eine eigene Connection und greift auf die selbe Tabelle zurück. Siehe folgender Quellcode, aber nur für die eine Hälfte. Die Deklarationen und Prozeduren für die Schaltflächen gibt es jeweils in doppelter Ausführung.
Dim myConnection1 As SqlConnection = New SqlConnection _
("workstation id=MEDION;packet size=4096;integrated security=SSPI;data source=MEDION;persist security info=True;initial catalog=Kontakte")
Dim myTable1 As New DataTable
Dim myAdapter1 As SqlDataAdapter = New SqlDataAdapter _
("Select * FROM Adressen", myConnection1)
Dim myTransaction1 As SqlTransaction
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
grdAdressen1.DataSource = myTable1
grdAdressen2.DataSource = myTable2
End Sub
Private Sub btnLaden1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLaden1.Click
myTable1.Clear()
myAdapter1.SelectCommand.Transaction = myTransaction1
myAdapter1.Fill(myTable1)
End Sub
Private Sub btnSpeichern1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSpeichern1.Click
Dim myCommandBuilder As New SqlCommandBuilder(myAdapter1)
myAdapter1.InsertCommand = myCommandBuilder.GetInsertCommand
myAdapter1.UpdateCommand = myCommandBuilder.GetUpdateCommand
myAdapter1.DeleteCommand = myCommandBuilder.GetDeleteCommand
myConnection1.Open()
myTransaction1 = myConnection1.BeginTransaction(IsolationLevel.ReadCommitted)
myAdapter1.InsertCommand.Transaction = myTransaction1
myAdapter1.UpdateCommand.Transaction = myTransaction1
myAdapter1.DeleteCommand.Transaction = myTransaction1
Try
myAdapter1.Update(myTable1)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub btnCommit1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCommit1.Click
Try
myTransaction1.Commit()
Catch ex As Exception
myTransaction1.Rollback()
Finally
myConnection1.Close()
End Try
End Sub
Problem ist nun, dass sich nichts verändert, egal welche Isolationsstufe ich für die Transaktion festlege. Bei einem Zugriff auf SQL Server ist immer der Zugriff komplett gesperrt, während bei dem gleichen Beispiel mit Access immer die Datensätze vor dem Commit ausgelesen werden.
Das setzen der Isolationsstufen hat in diesem Beispiel also keinerlei Auswirkung. Warum ist das so???
Danke schon mal
und Grüße
Steffi
Betreff |
Von |
Datum |
|
|
G.
Guest
|
15.06.2004 22:31 |
|
|
G.
Guest
|
15.06.2004 22:34 |
|
|
Stephanie
Hölzl
|
16.06.2004 01:16 |
|
|
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!