<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 " &amp; ex.GetType().ToString() &amp; _
        " was encountered while attempting to roll back the transaction.")
        End If
        End Try

        Console.WriteLine("An exception of type " &amp; e.GetType().ToString() &amp; _
        "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 " &amp; ex.GetType().ToString() &amp; _
        " was encountered while attempting to roll back the transaction.")
        End If
        End Try

        Console.WriteLine("An exception of type " &amp; e.GetType().ToString() &amp; _
        "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 " &amp; ex.GetType().ToString() &amp; _
        " was encountered while attempting to roll back the transaction.")
        End If
        End Try

        Console.WriteLine("An exception of type " &amp; e.GetType().ToString() &amp; _
        "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>