Hej En vild gissning, OdbcConnection kanske inte har stöd för transaktioner? Jag har gjort samma sak med MySqlConnection och det fungerar fint. Finns det någon anledning till att du kör via ODBC? Hej Lite tankar. Hej Det jag funderade på är om MySql-drivrutinen för ODBC har transaktionsstöd, jag vet inte hur det är där... Nytt försök med MySql Connector! Har du transaktionsstöd i databasen? Vill minnas att MyISAM-tabeller inte har det... Det ska vara InnoDB om du ska kunna använda transaktioner. TACK SÅ MYCKET Johan!!Roolback fungerar inte
Håller på med en komponent som ska hantera databas anrop mot MySql men jag kan inte få Rollback att fungera! Vad är felet på min kod?
Public Shared Function ExecuteTransaction(ByVal SqlArr As IEnumerable, ByVal connectionString As String) As String
'Dim i As Integer
Try
Using connection As New OdbcConnection(connectionString)
Dim command As New OdbcCommand()
Dim transaction As OdbcTransaction
' Set the Connection to the new OdbcConnection.
command.Connection = connection
' Open the connection and execute the transaction.
Try
connection.Open()
' Start a local transaction.
transaction = connection.BeginTransaction()
' Assign transaction object for a pending local transaction.
command.Connection = connection
command.Transaction = transaction
' Execute the commands.
Dim myEnumerator As System.Collections.IEnumerator = SqlArr.GetEnumerator()
While myEnumerator.MoveNext()
command.CommandText = myEnumerator.Current
command.ExecuteNonQuery()
End While
' Commit the transaction.
transaction.Commit()
Console.WriteLine("All records are written to database.")
Catch ex As Exception
Console.WriteLine(ex.Message)
' Try to rollback the transaction
Try
'transaction.Rollback()
command.Transaction.Rollback()
Catch
' Do nothing here; transaction is not active.
End Try
End Try
' The connection is automatically closed when the
' code exits the Using block.
End Using
Catch ex As Exception
'System.Windows.Forms.MessageBox.Show(ex.ToString)
End Try
End Function
/Per Arne
Sv: Roolback fungerar inte
/JohanSv:Roolback fungerar inte
ODBC ska ha stöd för transaction. Min fundering är om det är något speciellt när man går mot MySql i stället för Microsofts egna produkter?
Jobbar du med VB.Net mot MySql?
/Per ArneSv: Roolback fungerar inte
1. Notera att du har detta i ett try block. Så om det inte blir något fel så gör den ingen rollback.
2. Microsoft skriver här:
http://msdn2.microsoft.com/en-us/library/system.data.odbc.odbctransaction.rollback.aspx
The transaction can be rolled back only from a pending state (after BeginTransaction has been called, but before Commit is called). The transaction will be rolled back in the event it is disposed before Commit or Rollback is called.
Alltså titta så att det blir en exception innan Commit och efter BeginTransaction.
/AndreasSv:Roolback fungerar inte
Felet/urhoppet uppstår i koden
"command.ExecuteNonQuery()"
för jag har tre frågor i en array och den tredje av dessa frågor innehåller ett fel skapat av mig för att kontrollera Roolback funktionen.
Någon som har fungerande kod mot MySql att dela med sig av?
/Per ArneSv: Roolback fungerar inte
Jag har kört mycket MySql från .NET (C#) med transaktioner och det fungerar perfekt. Men jag använder Connector/NET för att kommunicera med MySql (http://dev.mysql.com/downloads/connector/net/5.1.html).
/JohanSv:Roolback fungerar inte
Jag får fortfarande inte roolback att fungera.
Koden:
Public Shared Function RunTransaction(ByVal SqlArr As IEnumerable, ByVal connString As String) As String
Dim myConnection As New MySqlConnection(connString)
myConnection.Open()
Dim myCommand As MySqlCommand = myConnection.CreateCommand()
Dim myTrans As MySqlTransaction
' Start a local transaction
myTrans = myConnection.BeginTransaction()
' Must assign both transaction object and connection
' to Command object for a pending local transaction
myCommand.Connection = myConnection
myCommand.Transaction = myTrans
Try
'************************
' Execute the commands.
Dim myEnumerator As System.Collections.IEnumerator = SqlArr.GetEnumerator()
While myEnumerator.MoveNext()
myCommand.CommandText = myEnumerator.Current
myCommand.ExecuteNonQuery()
End While
'************************
myTrans.Commit()
Catch e As Exception
Try
myTrans.Rollback()
Catch ex As MySqlException
If Not myTrans.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try
Console.WriteLine("An exception of type " & e.GetType().ToString() & _
"was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
Finally
myConnection.Close()
End Try
End Function 'RunTransaction
Har lagt in ett fel i den sista sql frågan som är laddad i arrayen så jag ska få rollback.
Roolback exekveras men datan finns fortfarande i databasen!
Något fel i koden eller?
/Per Arne
Sv: Roolback fungerar inte
/JohanSv:Roolback fungerar inte
Jag konverterade tabellerna till InnoDB och nu fungerar roolback som det ska!
/Per Arne