SqlConnection.BeginTransaction Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.