Udostępnij za pośrednictwem


SqlConnection.BeginTransaction Metoda

Definicja

Przeciążenia

BeginTransaction()

Uruchamia transakcję bazy danych.

BeginTransaction(IsolationLevel)

Uruchamia transakcję bazy danych z określonym poziomem izolacji.

BeginTransaction(String)

Uruchamia transakcję bazy danych o określonej nazwie transakcji.

BeginTransaction(IsolationLevel, String)

Uruchamia transakcję bazy danych z określonym poziomem izolacji i nazwą transakcji.

BeginTransaction()

Uruchamia transakcję bazy danych.

public:
 Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction();
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction ();
override this.BeginTransaction : unit -> Microsoft.Data.SqlClient.SqlTransaction
Public Function BeginTransaction () As SqlTransaction

Zwraca

Obiekt reprezentujący nową transakcję.

Wyjątki

Transakcje równoległe nie są dozwolone w przypadku korzystania z wielu aktywnych zestawów wyników (MARS).

Transakcje równoległe nie są obsługiwane.

Przykłady

Poniższy przykład tworzy element SqlConnection i .SqlTransaction Pokazuje również, jak używać BeginTransactionmetod , a Commiti Rollback .

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

To polecenie mapuje SQL Server implementację BEGIN TRANSACTION.

Musisz jawnie zatwierdzić lub wycofać transakcję przy użyciu Commit metody lub Rollback . Aby upewnić się, że dostawca danych .NET Framework dla modelu zarządzania transakcjami SQL Server działa prawidłowo, należy unikać używania innych modeli zarządzania transakcjami, takich jak dostawca danych udostępniany przez SQL Server.

Uwaga

Jeśli nie określisz poziomu izolacji, zostanie użyty domyślny poziom izolacji. Aby określić poziom izolacji z BeginTransaction metodą, użyj przeciążenia, które przyjmuje iso parametr (BeginTransaction). Poziom izolacji ustawiony dla transakcji będzie się powtarzać po zakończeniu transakcji i do momentu zamknięcia lub usunięcia połączenia. Ustawienie poziomu izolacji na Migawka w bazie danych, w której poziom izolacji migawki nie jest włączony, nie zgłasza wyjątku. Transakcja zostanie ukończona przy użyciu domyślnego poziomu izolacji.

Przestroga

Jeśli transakcja zostanie uruchomiona, a na serwerze wystąpi błąd na poziomie 16 lub wyższym, transakcja nie zostanie wycofana do momentu Read wywołania metody. W funkcji ExecuteReader nie jest zgłaszany żaden wyjątek.

Przestroga

Gdy zapytanie zwraca dużą ilość danych i wywołuje BeginTransactionmetodę , SqlException jest zgłaszana, ponieważ SQL Server nie zezwala na równoległe transakcje podczas korzystania z usługi MARS. Aby uniknąć tego problemu, należy zawsze skojarzyć transakcję z poleceniem, połączeniem lub obydwoma elementami przed otwarciem wszystkich czytelników.

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

Dotyczy

BeginTransaction(IsolationLevel)

Uruchamia transakcję bazy danych z określonym poziomem izolacji.

public:
 Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso);
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction (System.Data.IsolationLevel iso);
override this.BeginTransaction : System.Data.IsolationLevel -> Microsoft.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel) As SqlTransaction

Parametry

iso
IsolationLevel

Poziom izolacji, w ramach którego powinna zostać uruchomiona transakcja.

Zwraca

Obiekt reprezentujący nową transakcję.

Wyjątki

Transakcje równoległe nie są dozwolone w przypadku korzystania z wielu aktywnych zestawów wyników (MARS).

Transakcje równoległe nie są obsługiwane.

Przykłady

Poniższy przykład tworzy element SqlConnection i .SqlTransaction Pokazuje również, jak używać BeginTransactionmetod , a Commiti Rollback .

using Microsoft.Data.SqlClient;

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(IsolationLevel.ReadCommitted);

            // 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();
                transaction.Commit();
                Console.WriteLine("Both records are written to database.");
            }
            catch (Exception e)
            {
                try
                {
                    transaction.Rollback();
                }
                catch (SqlException ex)
                {
                    if (transaction.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.");
            }
        }
    }
}

Uwagi

To polecenie mapuje SQL Server implementację BEGIN TRANSACTION.

Musisz jawnie zatwierdzić lub wycofać transakcję przy użyciu Commit metody lub Rollback . Aby upewnić się, że dostawca danych .NET Framework dla modelu zarządzania transakcjami SQL Server działa prawidłowo, należy unikać używania innych modeli zarządzania transakcjami, takich jak dostawca danych udostępniany przez SQL Server.

Uwaga

Po zatwierdzeniu lub wycofaniu transakcji poziom izolacji transakcji będzie się powtarzać dla wszystkich kolejnych poleceń, które są w trybie autopoleceń (ustawienie domyślne SQL Server). Może to spowodować nieoczekiwane wyniki, takie jak poziom izolacji powtarzalnego odczytu utrwalania i blokowania innych użytkowników z wiersza. Aby zresetować poziom izolacji do domyślnego (ODCZYT ZATWIERDZONY), wykonaj instrukcję Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED lub wywołaj SqlConnection.BeginTransaction natychmiast.SqlTransaction.Commit Aby uzyskać więcej informacji na temat poziomów izolacji SQL Server, zobacz Poziomy izolacji transakcji.

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

Przestroga

Gdy zapytanie zwraca dużą ilość danych i wywołuje BeginTransactionmetodę , SqlException jest zgłaszana, ponieważ SQL Server nie zezwala na równoległe transakcje podczas korzystania z usługi MARS. Aby uniknąć tego problemu, należy zawsze skojarzyć transakcję z poleceniem, połączeniem lub obydwoma elementami przed otwarciem wszystkich czytelników.

Dotyczy

BeginTransaction(String)

Uruchamia transakcję bazy danych o określonej nazwie transakcji.

public:
 Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::String ^ transactionName);
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction (string transactionName);
override this.BeginTransaction : string -> Microsoft.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (transactionName As String) As SqlTransaction

Parametry

transactionName
String

Nazwa transakcji.

Zwraca

Obiekt reprezentujący nową transakcję.

Wyjątki

Transakcje równoległe nie są dozwolone w przypadku korzystania z wielu aktywnych zestawów wyników (MARS).

Transakcje równoległe nie są obsługiwane.

Przykłady

Poniższy przykład tworzy element SqlConnection i .SqlTransaction Pokazuje również, jak używać BeginTransactionmetod , a Commiti Rollback .

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

To polecenie mapuje SQL Server implementację BEGIN TRANSACTION.

Długość parametru transactionName nie może przekraczać 32 znaków; w przeciwnym razie zostanie zgłoszony wyjątek.

Wartość w parametrze transactionName może być używana w kolejnych wywołaniach metody Rollback i w savePoint parametrze Save metody .

Musisz jawnie zatwierdzić lub wycofać transakcję przy użyciu Commit metody lub Rollback . Aby upewnić się, że dostawca danych platformy .NET dla modelu zarządzania transakcjami SQL Server działa prawidłowo, unikaj używania innych modeli zarządzania transakcjami, takich jak ten dostarczony przez SQL Server.

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

Przestroga

Gdy zapytanie zwraca dużą ilość danych i wywołuje BeginTransactionmetodę , SqlException jest zgłaszana, ponieważ SQL Server nie zezwala na równoległe transakcje podczas korzystania z usługi MARS. Aby uniknąć tego problemu, należy zawsze skojarzyć transakcję z poleceniem, połączeniem lub obydwoma elementami przed otwarciem wszystkich czytelników.

Dotyczy

BeginTransaction(IsolationLevel, String)

Uruchamia transakcję bazy danych z określonym poziomem izolacji i nazwą transakcji.

public:
 Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso, System::String ^ transactionName);
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction (System.Data.IsolationLevel iso, string transactionName);
override this.BeginTransaction : System.Data.IsolationLevel * string -> Microsoft.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel, transactionName As String) As SqlTransaction

Parametry

iso
IsolationLevel

Poziom izolacji, w ramach którego powinna zostać uruchomiona transakcja.

transactionName
String

Nazwa transakcji.

Zwraca

Obiekt reprezentujący nową transakcję.

Wyjątki

Transakcje równoległe nie są dozwolone w przypadku korzystania z wielu aktywnych zestawów wyników (MARS).

Transakcje równoległe nie są obsługiwane.

Przykłady

Poniższy przykład tworzy element SqlConnection i .SqlTransaction Pokazuje również, jak używać BeginTransactionmetod , a Commiti Rollback .

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(
                    IsolationLevel.ReadCommitted, "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();
                    transaction.Commit();
                    Console.WriteLine("Both records are written to database.");
                }
                catch (Exception e)
                {
                    try
                    {
                        transaction.Rollback("SampleTransaction");
                    }
                    catch (SqlException ex)
                    {
                        if (transaction.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.");
                }
            }
        }
    }
}

Uwagi

To polecenie mapuje SQL Server implementację BEGIN TRANSACTION.

Wartość w parametrze transactionName może być używana w kolejnych wywołaniach metody Rollback i w savePoint parametrze Save metody .

Musisz jawnie zatwierdzić lub wycofać transakcję przy użyciu Commit metody lub Rollback . Aby upewnić się, że model zarządzania transakcjami SQL Server działa prawidłowo, należy unikać używania innych modeli zarządzania transakcjami, takich jak model zapewniany przez SQL Server.

Uwaga

Po zatwierdzeniu lub wycofaniu transakcji poziom izolacji transakcji będzie się powtarzać dla wszystkich kolejnych poleceń, które są w trybie autopoleceń (ustawienie domyślne SQL Server). Może to spowodować nieoczekiwane wyniki, takie jak poziom izolacji powtarzalnego odczytu utrwalania i blokowania innych użytkowników z wiersza. Aby zresetować poziom izolacji do domyślnego (ODCZYT ZATWIERDZONY), wykonaj instrukcję Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED lub wywołaj SqlConnection.BeginTransaction natychmiast.SqlTransaction.Commit Aby uzyskać więcej informacji na temat poziomów izolacji SQL Server, zobacz Poziomy izolacji transakcji.

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

Przestroga

Gdy zapytanie zwraca dużą ilość danych i wywołuje BeginTransactionmetodę , SqlException jest zgłaszana, ponieważ SQL Server nie zezwala na równoległe transakcje podczas korzystania z usługi MARS. Aby uniknąć tego problemu, należy zawsze skojarzyć transakcję z poleceniem, połączeniem lub obydwoma elementami przed otwarciem wszystkich czytelników.

Dotyczy