|
|
|
|
<docs>
|
|
|
|
|
<Class>
|
|
|
|
|
<summary>
|
|
|
|
|
Represents a SQL transaction to be made in a MySQL database. This class cannot be inherited.
|
|
|
|
|
</summary>
|
|
|
|
|
|
|
|
|
|
<remarks>
|
|
|
|
|
The application creates a <B>MySqlTransaction</B> object by calling <see cref="MySqlConnection.BeginTransaction()"/>
|
|
|
|
|
on the <see cref="MySqlConnection"/> object. All subsequent operations associated with the
|
|
|
|
|
transaction (for example, committing or aborting the transaction), are performed on the
|
|
|
|
|
<B>MySqlTransaction</B> object.
|
|
|
|
|
</remarks>
|
|
|
|
|
|
|
|
|
|
<example>
|
|
|
|
|
The following example creates a <see cref="MySqlConnection"/> and a <B>MySqlTransaction</B>.
|
|
|
|
|
It also demonstrates how to use the <see cref="MySqlConnection.BeginTransaction()"/>,
|
|
|
|
|
<see cref="MySqlTransaction.Commit"/>, and <see cref="MySqlTransaction.Rollback"/> methods.
|
|
|
|
|
<code lang="vbnet">
|
|
|
|
|
Public Sub RunTransaction(myConnString As String)
|
|
|
|
|
Dim myConnection As New MySqlConnection(myConnString)
|
|
|
|
|
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
|
|
|
|
|
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
|
|
|
|
|
myCommand.ExecuteNonQuery()
|
|
|
|
|
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
|
|
|
|
|
myCommand.ExecuteNonQuery()
|
|
|
|
|
myTrans.Commit()
|
|
|
|
|
Console.WriteLine("Both records are written to database.")
|
|
|
|
|
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 Sub 'RunTransaction
|
|
|
|
|
</code>
|
|
|
|
|
<code lang="C#">
|
|
|
|
|
public void RunTransaction(string myConnString)
|
|
|
|
|
{
|
|
|
|
|
MySqlConnection myConnection = new MySqlConnection(myConnString);
|
|
|
|
|
myConnection.Open();
|
|
|
|
|
|
|
|
|
|
MySqlCommand myCommand = myConnection.CreateCommand();
|
|
|
|
|
MySqlTransaction myTrans;
|
|
|
|
|
|
|
|
|
|
// 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
|
|
|
|
|
{
|
|
|
|
|
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
|
|
|
|
|
myCommand.ExecuteNonQuery();
|
|
|
|
|
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
|
|
|
|
|
myCommand.ExecuteNonQuery();
|
|
|
|
|
myTrans.Commit();
|
|
|
|
|
Console.WriteLine("Both records are written to database.");
|
|
|
|
|
}
|
|
|
|
|
catch(Exception e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
myTrans.Rollback();
|
|
|
|
|
}
|
|
|
|
|
catch (MySqlException ex)
|
|
|
|
|
{
|
|
|
|
|
if (myTrans.Connection != null)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("An exception of type " + ex.GetType() +
|
|
|
|
|
" was encountered while attempting to roll back the transaction.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("An exception of type " + e.GetType() +
|
|
|
|
|
" was encountered while inserting the data.");
|
|
|
|
|
Console.WriteLine("Neither record was written to database.");
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
myConnection.Close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</code>
|
|
|
|
|
</example>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</Class>
|
|
|
|
|
|
|
|
|
|
<Rollback>
|
|
|
|
|
<summary>
|
|
|
|
|
Rolls back a transaction from a pending state.
|
|
|
|
|
</summary>
|
|
|
|
|
<remarks>
|
|
|
|
|
The Rollback method is equivalent to the MySQL statement ROLLBACK.
|
|
|
|
|
The transaction can only be rolled back from a pending state
|
|
|
|
|
(after BeginTransaction has been called, but before Commit is
|
|
|
|
|
called).
|
|
|
|
|
</remarks>
|
|
|
|
|
<example>
|
|
|
|
|
The following example creates a <see cref="MySqlConnection"/> and a
|
|
|
|
|
<see cref="MySqlTransaction"/>. It also demonstrates how to use the
|
|
|
|
|
<see cref="MySqlConnection.BeginTransaction()"/>, <see cref="Commit"/>, and <B>Rollback</B>
|
|
|
|
|
methods.
|
|
|
|
|
<code lang="vbnet">
|
|
|
|
|
Public Sub RunSqlTransaction(myConnString As String)
|
|
|
|
|
Dim myConnection As New MySqlConnection(myConnString)
|
|
|
|
|
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
|
|
|
|
|
myCommand.CommandText = "Insert into mytable (id, desc) VALUES (100, 'Description')"
|
|
|
|
|
myCommand.ExecuteNonQuery()
|
|
|
|
|
myCommand.CommandText = "Insert into mytable (id, desc) VALUES (101, 'Description')"
|
|
|
|
|
myCommand.ExecuteNonQuery()
|
|
|
|
|
myTrans.Commit()
|
|
|
|
|
Console.WriteLine("Success.")
|
|
|
|
|
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 Sub
|
|
|
|
|
</code>
|
|
|
|
|
<code lang="C#">
|
|
|
|
|
public void RunSqlTransaction(string myConnString)
|
|
|
|
|
{
|
|
|
|
|
MySqlConnection myConnection = new MySqlConnection(myConnString);
|
|
|
|
|
myConnection.Open();
|
|
|
|
|
|
|
|
|
|
MySqlCommand myCommand = myConnection.CreateCommand();
|
|
|
|
|
MySqlTransaction myTrans;
|
|
|
|
|
|
|
|
|
|
// 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
|
|
|
|
|
{
|
|
|
|
|
myCommand.CommandText = "Insert into mytable (id, desc) VALUES (100, 'Description')";
|
|
|
|
|
myCommand.ExecuteNonQuery();
|
|
|
|
|
myCommand.CommandText = "Insert into mytable (id, desc) VALUES (101, 'Description')";
|
|
|
|
|
myCommand.ExecuteNonQuery();
|
|
|
|
|
myTrans.Commit();
|
|
|
|
|
Console.WriteLine("Both records are written to database.");
|
|
|
|
|
}
|
|
|
|
|
catch(Exception e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
myTrans.Rollback();
|
|
|
|
|
}
|
|
|
|
|
catch (MySqlException ex)
|
|
|
|
|
{
|
|
|
|
|
if (myTrans.Connection != null)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("An exception of type " + ex.GetType() +
|
|
|
|
|
" was encountered while attempting to roll back the transaction.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("An exception of type " + e.GetType() +
|
|
|
|
|
" was encountered while inserting the data.");
|
|
|
|
|
Console.WriteLine("Neither record was written to database.");
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
myConnection.Close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</code>
|
|
|
|
|
</example>
|
|
|
|
|
</Rollback>
|
|
|
|
|
|
|
|
|
|
<Commit>
|
|
|
|
|
<summary>
|
|
|
|
|
Commits the database transaction.
|
|
|
|
|
</summary>
|
|
|
|
|
<remarks>
|
|
|
|
|
The <b>Commit</b> method is equivalent to the MySQL SQL statement
|
|
|
|
|
COMMIT.
|
|
|
|
|
</remarks>
|
|
|
|
|
<example>
|
|
|
|
|
The following example creates a <see cref="MySqlConnection"/> and a
|
|
|
|
|
<see cref="MySqlTransaction"/>. It also demonstrates how to use the
|
|
|
|
|
<see cref="MySqlConnection.BeginTransaction()"/>, <see cref="Commit"/>, and <B>Rollback</B>
|
|
|
|
|
methods.
|
|
|
|
|
<code lang="vbnet">
|
|
|
|
|
Public Sub RunSqlTransaction(myConnString As String)
|
|
|
|
|
Dim myConnection As New MySqlConnection(myConnString)
|
|
|
|
|
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
|
|
|
|
|
myCommand.CommandText = "Insert into mytable (id, desc) VALUES (100, 'Description')"
|
|
|
|
|
myCommand.ExecuteNonQuery()
|
|
|
|
|
myCommand.CommandText = "Insert into mytable (id, desc) VALUES (101, 'Description')"
|
|
|
|
|
myCommand.ExecuteNonQuery()
|
|
|
|
|
myTrans.Commit()
|
|
|
|
|
Console.WriteLine("Success.")
|
|
|
|
|
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 Sub
|
|
|
|
|
</code>
|
|
|
|
|
<code lang="C#">
|
|
|
|
|
public void RunSqlTransaction(string myConnString)
|
|
|
|
|
{
|
|
|
|
|
MySqlConnection myConnection = new MySqlConnection(myConnString);
|
|
|
|
|
myConnection.Open();
|
|
|
|
|
|
|
|
|
|
MySqlCommand myCommand = myConnection.CreateCommand();
|
|
|
|
|
MySqlTransaction myTrans;
|
|
|
|
|
|
|
|
|
|
// 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
|
|
|
|
|
{
|
|
|
|
|
myCommand.CommandText = "Insert into mytable (id, desc) VALUES (100, 'Description')";
|
|
|
|
|
myCommand.ExecuteNonQuery();
|
|
|
|
|
myCommand.CommandText = "Insert into mytable (id, desc) VALUES (101, 'Description')";
|
|
|
|
|
myCommand.ExecuteNonQuery();
|
|
|
|
|
myTrans.Commit();
|
|
|
|
|
Console.WriteLine("Both records are written to database.");
|
|
|
|
|
}
|
|
|
|
|
catch(Exception e)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
myTrans.Rollback();
|
|
|
|
|
}
|
|
|
|
|
catch (MySqlException ex)
|
|
|
|
|
{
|
|
|
|
|
if (myTrans.Connection != null)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("An exception of type " + ex.GetType() +
|
|
|
|
|
" was encountered while attempting to roll back the transaction.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("An exception of type " + e.GetType() +
|
|
|
|
|
" was encountered while inserting the data.");
|
|
|
|
|
Console.WriteLine("Neither record was written to database.");
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
myConnection.Close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</code>
|
|
|
|
|
</example>
|
|
|
|
|
</Commit>
|
|
|
|
|
|
|
|
|
|
</docs>
|