Udostępnij za pośrednictwem


SqlTransaction.Rollback Metoda

Definicja

Przeciążenia

Rollback()

Cofa transakcję ze stanu oczekiwania.

Rollback(String)

Wycofuje transakcję ze stanu oczekiwania i określa nazwę transakcji lub punktu zapisu.

Rollback()

Cofa transakcję ze stanu oczekiwania.

public:
 override void Rollback();
public override void Rollback ();
override this.Rollback : unit -> unit
Public Overrides Sub Rollback ()

Wyjątki

Wystąpił błąd podczas próby zatwierdzenia transakcji.

Transakcja została już zatwierdzona lub wycofana.

-lub-

Połączenie jest przerwane.

Przykłady

Poniższy przykład tworzy obiekt SqlConnection i SqlTransaction. Demonstruje również sposób używania BeginTransactionmetod , Commiti Rollback . Transakcja jest wycofywane z powodu dowolnego błędu. Try/Catch Obsługa błędów służy do obsługi błędów podczas próby zatwierdzenia lub wycofywania transakcji.

using Microsoft.Data.SqlClient;

namespace Transaction1CS
{
    class Program
    {
        static void Main()
        {
            string connectionString =
                "Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local)";
            ExecuteSqlTransaction(connectionString);
            Console.ReadLine();
        }
        private static void ExecuteSqlTransaction(string connectionString)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();

                SqlCommand command = connection.CreateCommand();
                SqlTransaction transaction;

                // Start a local transaction.
                transaction = connection.BeginTransaction();

                // Must assign both transaction object and connection
                // to Command object for a pending local transaction
                command.Connection = connection;
                command.Transaction = transaction;

                try
                {
                    command.CommandText =
                        "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
                    command.ExecuteNonQuery();
                    command.CommandText =
                        "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
                    command.ExecuteNonQuery();

                    // Attempt to commit the transaction.
                    transaction.Commit();
                    Console.WriteLine("Both records are written to database.");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
                    Console.WriteLine("  Message: {0}", ex.Message);

                    // Attempt to roll back the transaction.
                    try
                    {
                        transaction.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        // This catch block will handle any errors that may have occurred
                        // on the server that would cause the rollback to fail, such as
                        // a closed connection.
                        Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                        Console.WriteLine("  Message: {0}", ex2.Message);
                    }
                }
            }
        }
    }
}

Uwagi

Metoda jest równoważna Rollback instrukcji TRANSact-SQL ROLLBACK TRANSACTION. Aby uzyskać więcej informacji, zobacz ROLLBACK TRANSACTION (Transact-SQL) .

Transakcję można wycofać tylko ze stanu oczekiwania (po BeginTransaction wywołaniu, ale przed Commit wywołaniem). Transakcja jest wycofywane w przypadku, gdy jest on usuwany przed Commit lub Rollback jest wywoływany.

Uwaga

Try/Catch obsługa wyjątków powinna być zawsze używana podczas wycofywania transakcji. Element Rollback generuje InvalidOperationException wartość , jeśli połączenie zostało przerwane lub czy transakcja została już wycofana na serwerze.

Aby uzyskać więcej informacji na temat transakcji SQL Server, zobacz Transakcje (Transact-SQL).

Dotyczy

Rollback(String)

Wycofuje transakcję ze stanu oczekiwania i określa nazwę transakcji lub punktu zapisu.

public:
 void Rollback(System::String ^ transactionName);
public:
 override void Rollback(System::String ^ transactionName);
public void Rollback (string transactionName);
public override void Rollback (string transactionName);
override this.Rollback : string -> unit
Public Sub Rollback (transactionName As String)
Public Overrides Sub Rollback (transactionName As String)

Parametry

transactionName
String

Nazwa transakcji, która ma być wycofana, lub punkt zapisywania, do którego ma być wycofany.

Wyjątki

Nie określono nazwy transakcji.

Transakcja została już zatwierdzona lub wycofana.

-lub-

Połączenie jest przerwane.

Przykłady

Poniższy przykład tworzy obiekt SqlConnection i SqlTransaction. Demonstruje również sposób używania BeginTransactionmetod , Commiti Rollback . Transakcja jest wycofywane z powodu dowolnego błędu. Try/Catch Obsługa błędów służy do obsługi błędów podczas próby zatwierdzenia lub wycofywania transakcji.

using Microsoft.Data.SqlClient;

namespace Transaction1CS
{
    class Program
    {
        static void Main()
        {
            string connectionString =
                "Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local)";
            ExecuteSqlTransaction(connectionString);
            Console.ReadLine();
        }
        private static void ExecuteSqlTransaction(string connectionString)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();

                SqlCommand command = connection.CreateCommand();
                SqlTransaction transaction;

                // Start a local transaction.
                transaction = connection.BeginTransaction("SampleTransaction");

                // Must assign both transaction object and connection
                // to Command object for a pending local transaction
                command.Connection = connection;
                command.Transaction = transaction;

                try
                {
                    command.CommandText =
                        "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
                    command.ExecuteNonQuery();
                    command.CommandText =
                        "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
                    command.ExecuteNonQuery();

                    // Attempt to commit the transaction.
                    transaction.Commit();
                    Console.WriteLine("Both records are written to database.");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
                    Console.WriteLine("  Message: {0}", ex.Message);

                    // Attempt to roll back the transaction.
                    try
                    {
                        transaction.Rollback("SampleTransaction");
                    }
                    catch (Exception ex2)
                    {
                        // This catch block will handle any errors that may have occurred
                        // on the server that would cause the rollback to fail, such as
                        // a closed connection.
                        Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                        Console.WriteLine("  Message: {0}", ex2.Message);
                    }
                }
            }
        }
    }
}

Uwagi

Metoda jest równoważna Rollback instrukcji TRANSact-SQL ROLLBACK TRANSACTION. Aby uzyskać więcej informacji, zobacz Transakcje (Transact-SQL).

Transakcję można wycofać tylko ze stanu oczekiwania (po BeginTransaction wywołaniu, ale przed Commit wywołaniem). Transakcja jest wycofywane, jeśli jest usuwana przed Commit lub Rollback jest wywoływana.

Uwaga

Try/Catch obsługa wyjątków powinna być zawsze używana podczas wycofywania transakcji. Element Rollback generuje InvalidOperationException wartość , jeśli połączenie zostało przerwane lub czy transakcja została już wycofana na serwerze.

Aby uzyskać więcej informacji na temat transakcji SQL Server, zobacz Transakcje (Transact-SQL).

Dotyczy