Hi,
I am having problems with rollback using the SQLTransaction object. I
am trying to insert records in two tables in a transaction. I want to
rollback all the changes if any exception occurs in any of the inserts.
But the SQLTransaction object only rolls back the inserts that happen
before an exception. All inserts after the exception go through. What
am I doing wrong? Is it that I cannot do any more Inserts using the
transaction object once the exception is thrown? I need to rollback at
the first exception?
Here is my code snippet
=============== =============== =============== =====
Dim cnTracker As New
SqlConnection(S ystem.Configura tion.Configurat ionSettings.App Settings.Item(" sqlconntracker" ))
Dim cmdTracker As New SqlCommand
Dim transTracker As SqlTransaction
Dim sSQL As String
Dim bError As Boolean
cnTracker.Open( )
cmdTracker.Conn ection = cnTracker
transTracker = cnTracker.Begin Transaction(Iso lationLevel.Rea dCommitted)
cmdTracker.Tran saction = transTracker
bError = False
Try
'This Statement get rolled back
sSQL = "INSERT INTO [tblContacts] ([txtContactName], [nClientID],
[nClientFieldID], [bDefaultValue]) VALUES ('Tiffany Havlicek', 215,
4069, NULL)"
cmdTracker.Comm andType = CommandType.Tex t
cmdTracker.Comm andText = sSQL
cmdTracker.Exec uteNonQuery()
Catch ex As Exception
bError = True
End Try
Try
'This statement causes an exception
sSQL = "insert into tblPortfolio (nClientID , Allocation_Date _74_6,
Land_Manager_81 _11) VALUES (215, convert(datetim e, 'assas') , 2996)"
cmdTracker.Comm andType = CommandType.Tex t
cmdTracker.Comm andText = sSQL
cmdTracker.Exec uteNonQuery()
Catch ex As Exception
bError = True
End Try
Try
'This Statement does NOT get rolled back!!!!
sSQL = "INSERT INTO [tblContacts] ([txtContactName], [nClientID],
[nClientFieldID], [bDefaultValue]) VALUES ('Riaan', 215, 4069, NULL)"
cmdTracker.Comm andType = CommandType.Tex t
cmdTracker.Comm andText = sSQL
cmdTracker.Exec uteNonQuery()
Catch ex As Exception
bError = True
End Try
If (bError) Then
transTracker.Ro llback()
Else
transTracker.Co mmit()
End If
I am having problems with rollback using the SQLTransaction object. I
am trying to insert records in two tables in a transaction. I want to
rollback all the changes if any exception occurs in any of the inserts.
But the SQLTransaction object only rolls back the inserts that happen
before an exception. All inserts after the exception go through. What
am I doing wrong? Is it that I cannot do any more Inserts using the
transaction object once the exception is thrown? I need to rollback at
the first exception?
Here is my code snippet
=============== =============== =============== =====
Dim cnTracker As New
SqlConnection(S ystem.Configura tion.Configurat ionSettings.App Settings.Item(" sqlconntracker" ))
Dim cmdTracker As New SqlCommand
Dim transTracker As SqlTransaction
Dim sSQL As String
Dim bError As Boolean
cnTracker.Open( )
cmdTracker.Conn ection = cnTracker
transTracker = cnTracker.Begin Transaction(Iso lationLevel.Rea dCommitted)
cmdTracker.Tran saction = transTracker
bError = False
Try
'This Statement get rolled back
sSQL = "INSERT INTO [tblContacts] ([txtContactName], [nClientID],
[nClientFieldID], [bDefaultValue]) VALUES ('Tiffany Havlicek', 215,
4069, NULL)"
cmdTracker.Comm andType = CommandType.Tex t
cmdTracker.Comm andText = sSQL
cmdTracker.Exec uteNonQuery()
Catch ex As Exception
bError = True
End Try
Try
'This statement causes an exception
sSQL = "insert into tblPortfolio (nClientID , Allocation_Date _74_6,
Land_Manager_81 _11) VALUES (215, convert(datetim e, 'assas') , 2996)"
cmdTracker.Comm andType = CommandType.Tex t
cmdTracker.Comm andText = sSQL
cmdTracker.Exec uteNonQuery()
Catch ex As Exception
bError = True
End Try
Try
'This Statement does NOT get rolled back!!!!
sSQL = "INSERT INTO [tblContacts] ([txtContactName], [nClientID],
[nClientFieldID], [bDefaultValue]) VALUES ('Riaan', 215, 4069, NULL)"
cmdTracker.Comm andType = CommandType.Tex t
cmdTracker.Comm andText = sSQL
cmdTracker.Exec uteNonQuery()
Catch ex As Exception
bError = True
End Try
If (bError) Then
transTracker.Ro llback()
Else
transTracker.Co mmit()
End If
Comment