<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>