Compartilhar via


SqlConnection.BeginTransaction Método

Definição

Sobrecargas

BeginTransaction()

Inicia uma transação de banco de dados.

BeginTransaction(IsolationLevel)

Inicia uma transação de banco de dados com o nível de isolamento especificado.

BeginTransaction(String)

Inicia uma transação de banco de dados com o nome da transação especificado.

BeginTransaction(IsolationLevel, String)

Inicia uma transação de banco de dados com o nível de isolamento e nome de transação especificados.

BeginTransaction()

Inicia uma transação de banco de dados.

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

Retornos

Um objeto que representa a nova transação.

Exceções

Não são permitidas transações paralelas ao usar MARS (Multiple Active Result Sets).

Não há suporte para transações paralelas.

Exemplos

O exemplo a seguir cria um SqlConnection e um SqlTransaction. Ele também demonstra como usar os BeginTransactionmétodos , um Commite 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);
                    }
                }
            }
        }
    }
}

Comentários

Esse comando é mapeado para a implementação SQL Server de BEGIN TRANSACTION.

Você deve confirmar ou reverter explicitamente a transação usando o Commit método ou Rollback . Para garantir que o provedor de dados .NET Framework para SQL Server modelo de gerenciamento de transações seja executado corretamente, evite usar outros modelos de gerenciamento de transações, como o fornecido pelo SQL Server.

Observação

Se você não especificar um nível de isolamento, o nível de isolamento padrão será usado. Para especificar um nível de isolamento com o BeginTransaction método , use a sobrecarga que usa o iso parâmetro (BeginTransaction). O nível de isolamento definido para uma transação persiste após a conclusão da transação e até que a conexão seja fechada ou descartada. Definir o nível de isolamento como Instantâneo em um banco de dados em que o nível de isolamento do instantâneo não está habilitado não gera uma exceção. A transação será concluída usando o nível de isolamento padrão.

Cuidado

Se uma transação for iniciada e ocorrer um erro de nível 16 ou superior no servidor, a transação não será revertida até que o Read método seja invocado. Nenhuma exceção é gerada no ExecuteReader.

Cuidado

Quando a consulta retorna uma grande quantidade de dados e chama BeginTransaction, um SqlException é gerado porque SQL Server não permite transações paralelas ao usar MARS. Para evitar esse problema, sempre associe uma transação ao comando , à conexão ou a ambos antes que os leitores estejam abertos.

Para obter mais informações sobre transações SQL Server, consulte Transações (Transact-SQL).

Aplica-se a

BeginTransaction(IsolationLevel)

Inicia uma transação de banco de dados com o nível de isolamento especificado.

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

Parâmetros

iso
IsolationLevel

O nível de isolamento em que a transação deve ser executada.

Retornos

Um objeto que representa a nova transação.

Exceções

Não são permitidas transações paralelas ao usar MARS (Multiple Active Result Sets).

Não há suporte para transações paralelas.

Exemplos

O exemplo a seguir cria um SqlConnection e um SqlTransaction. Ele também demonstra como usar os BeginTransactionmétodos , um Commite 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.");
            }
        }
    }
}

Comentários

Esse comando é mapeado para a implementação SQL Server de BEGIN TRANSACTION.

Você deve confirmar ou reverter explicitamente a transação usando o Commit método ou Rollback . Para garantir que o provedor de dados .NET Framework para SQL Server modelo de gerenciamento de transações seja executado corretamente, evite usar outros modelos de gerenciamento de transações, como o fornecido pelo SQL Server.

Observação

Depois que uma transação é confirmada ou revertida, o nível de isolamento da transação persiste para todos os comandos subsequentes que estão no modo de confirmação automática (o padrão SQL Server). Isso pode produzir resultados inesperados, como um nível de isolamento de REPEATABLE READ persistindo e bloqueando outros usuários fora de uma linha. Para redefinir o nível de isolamento para o padrão (READ COMMITTED), execute a instrução TRANSact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED ou chame SqlConnection.BeginTransaction seguida imediatamente por SqlTransaction.Commit. Para obter mais informações sobre SQL Server níveis de isolamento, consulte Níveis de isolamento da transação.

Para obter mais informações sobre transações SQL Server, consulte Transações (Transact-SQL).

Cuidado

Quando a consulta retorna uma grande quantidade de dados e chama BeginTransaction, um SqlException é gerado porque SQL Server não permite transações paralelas ao usar MARS. Para evitar esse problema, sempre associe uma transação ao comando , à conexão ou a ambos antes que os leitores estejam abertos.

Aplica-se a

BeginTransaction(String)

Inicia uma transação de banco de dados com o nome da transação especificado.

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

Parâmetros

transactionName
String

O nome da transação.

Retornos

Um objeto que representa a nova transação.

Exceções

Não são permitidas transações paralelas ao usar MARS (Multiple Active Result Sets).

Não há suporte para transações paralelas.

Exemplos

O exemplo a seguir cria um SqlConnection e um SqlTransaction. Ele também demonstra como usar os BeginTransactionmétodos , um Commite 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);
                    }
                }
            }
        }
    }
}

Comentários

Esse comando é mapeado para a implementação SQL Server de BEGIN TRANSACTION.

O comprimento do transactionName parâmetro não deve exceder 32 caracteres; caso contrário, uma exceção será gerada.

O valor no transactionName parâmetro pode ser usado em chamadas posteriores para Rollback e no savePoint parâmetro do Save método .

Você deve confirmar ou reverter explicitamente a transação usando o Commit método ou Rollback . Para garantir que o provedor de dados .NET para SQL Server modelo de gerenciamento de transações seja executado corretamente, evite usar outros modelos de gerenciamento de transações, como o fornecido pelo SQL Server.

Para obter mais informações sobre transações SQL Server, consulte Transações (Transact-SQL).

Cuidado

Quando a consulta retorna uma grande quantidade de dados e chama BeginTransaction, um SqlException é gerado porque SQL Server não permite transações paralelas ao usar MARS. Para evitar esse problema, sempre associe uma transação ao comando , à conexão ou a ambos antes que os leitores estejam abertos.

Aplica-se a

BeginTransaction(IsolationLevel, String)

Inicia uma transação de banco de dados com o nível de isolamento e nome de transação especificados.

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

Parâmetros

iso
IsolationLevel

O nível de isolamento em que a transação deve ser executada.

transactionName
String

O nome da transação.

Retornos

Um objeto que representa a nova transação.

Exceções

Não são permitidas transações paralelas ao usar MARS (Multiple Active Result Sets).

Não há suporte para transações paralelas.

Exemplos

O exemplo a seguir cria um SqlConnection e um SqlTransaction. Ele também demonstra como usar os BeginTransactionmétodos , um Commite 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.");
                }
            }
        }
    }
}

Comentários

Esse comando é mapeado para a implementação SQL Server de BEGIN TRANSACTION.

O valor no transactionName parâmetro pode ser usado em chamadas posteriores para Rollback e no savePoint parâmetro do Save método .

Você deve confirmar ou reverter explicitamente a transação usando o Commit método ou Rollback . Para garantir que o modelo de gerenciamento de transações SQL Server seja executado corretamente, evite usar outros modelos de gerenciamento de transações, como o fornecido pelo SQL Server.

Observação

Depois que uma transação é confirmada ou revertida, o nível de isolamento da transação persiste para todos os comandos subsequentes que estão no modo de confirmação automática (o padrão SQL Server). Isso pode produzir resultados inesperados, como um nível de isolamento de REPEATABLE READ persistindo e bloqueando outros usuários fora de uma linha. Para redefinir o nível de isolamento para o padrão (READ COMMITTED), execute a instrução TRANSact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED ou chame SqlConnection.BeginTransaction seguida imediatamente por SqlTransaction.Commit. Para obter mais informações sobre SQL Server níveis de isolamento, consulte Níveis de isolamento da transação.

Para obter mais informações sobre transações SQL Server, consulte Transações (Transact-SQL).

Cuidado

Quando a consulta retorna uma grande quantidade de dados e chama BeginTransaction, um SqlException é gerado porque SQL Server não permite transações paralelas ao usar MARS. Para evitar esse problema, sempre associe uma transação ao comando , à conexão ou a ambos antes que os leitores estejam abertos.

Aplica-se a