SqlConnection.BeginTransaction Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Inicia uma transação na base de dados.
Sobrecargas
| Name | Description |
|---|---|
| BeginTransaction() |
Inicia uma transação na base de dados. |
| BeginTransaction(IsolationLevel) |
Inicia uma transação de base de dados com o nível de isolamento especificado. |
| BeginTransaction(String) |
Inicia uma transação na base de dados com o nome da transação especificado. |
| BeginTransaction(IsolationLevel, String) |
Inicia uma transação de base de dados com o nível de isolamento e o nome da transação especificados. |
BeginTransaction()
Inicia uma transação na base de dados.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction();
public System.Data.SqlClient.SqlTransaction BeginTransaction();
member this.BeginTransaction : unit -> System.Data.SqlClient.SqlTransaction
override this.BeginTransaction : unit -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction () As SqlTransaction
Devoluções
Um objeto que representa a nova transação.
Exceções
Transações paralelas não são permitidas quando se utilizam Múltiplos Conjuntos de Resultados Ativos (MARS).
Transações paralelas não são suportadas.
Exemplos
O exemplo seguinte cria um SqlConnection e um SqlTransaction. Também demonstra como usar os BeginTransactionmétodos , a Commit, e Rollback .
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);
}
}
}
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' 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 ex As Exception
Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
Console.WriteLine(" Message: {0}", ex.Message)
' Attempt to roll back the transaction.
Try
transaction.Rollback()
Catch ex2 As Exception
' 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)
End Try
End Try
End Using
End Sub
Observações
Este comando corresponde à implementação do SQL Server do BEGIN TRANSACTION.
Deve explicitamente comprometer ou reverter a transação usando o Commit método ou Rollback . Para garantir que o modelo de gestão de transações do .NET Framework Data Provider for SQL Server funciona corretamente, evite usar outros modelos de gestão de transações, como o fornecido pelo SQL Server.
Note
Se não especificar um nível de isolamento, é utilizado o nível de isolamento padrão. Para especificar um nível de isolamento com o BeginTransaction método, use a sobrecarga que toma 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 ligação seja encerrada ou descartada. Definir o nível de isolamento para Snapshot numa base de dados onde o nível de isolamento de snapshot não está ativado não lança uma exceção. A transação será concluída usando o nível de isolamento padrão.
Caution
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. Não há exceção no ExecuteReader.
Caution
Quando a sua consulta devolve uma grande quantidade de dados e chama BeginTransaction, é lançado um SqlException porque SQL Server não permite transações paralelas ao usar MARS. Para evitar este problema, associe sempre uma transação ao comando, à ligação ou a ambos antes de abrir qualquer leitor.
Para mais informações sobre SQL Server transações, consulte Transações (Transact-SQL).
Ver também
- Transações e Concorrência
- Ligar a uma Fonte de Dados em ADO.NET
- SQL Server e ADO.NET
- Visão geral ADO.NET
Aplica-se a
BeginTransaction(IsolationLevel)
Inicia uma transação de base de dados com o nível de isolamento especificado.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso);
public System.Data.SqlClient.SqlTransaction BeginTransaction(System.Data.IsolationLevel iso);
member this.BeginTransaction : System.Data.IsolationLevel -> System.Data.SqlClient.SqlTransaction
override this.BeginTransaction : System.Data.IsolationLevel -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel) As SqlTransaction
Parâmetros
- iso
- IsolationLevel
O nível de isolamento sob o qual a transação deve decorrer.
Devoluções
Um objeto que representa a nova transação.
Exceções
Transações paralelas não são permitidas quando se utilizam Múltiplos Conjuntos de Resultados Ativos (MARS).
Transações paralelas não são suportadas.
Exemplos
O exemplo seguinte cria um SqlConnection e um SqlTransaction. Também demonstra como usar os BeginTransactionmétodos , a Commit, e Rollback .
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.");
}
}
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' 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 e As Exception
Try
transaction.Rollback()
Catch ex As SqlException
If Not transaction.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try
Console.WriteLine("An exception of type " & e.GetType().ToString() & _
"was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
End Try
End Using
End Sub
Observações
Este comando corresponde à implementação do SQL Server do BEGIN TRANSACTION.
Deve explicitamente comprometer ou reverter a transação usando o Commit método ou Rollback . Para garantir que o modelo de gestão de transações do .NET Framework Data Provider for SQL Server funciona corretamente, evite usar outros modelos de gestão de transações, como o fornecido pelo SQL Server.
Note
Depois de uma transação ser comprometida ou revertida, o nível de isolamento da transação mantém-se para todos os comandos subsequentes que estejam em modo de autocommit (o padrão do SQL Server). Isto pode produzir resultados inesperados, como um nível de isolamento de LEITURA REPETÍVEL que persiste e bloqueia outros utilizadores fora de uma linha. Para redefinir o nível de isolamento para o padrão (READ COMMITTED), execute a instrução read commit do nível de isolamento da transação Transact-SQL set, ou chame SqlConnection.BeginTransaction seguida imediatamente por SqlTransaction.Commit. Para mais informações sobre SQL Server níveis de isolamento, consulte Transaction Isolation Levels.
Para mais informações sobre SQL Server transações, consulte Transações (Transact-SQL).
Caution
Quando a sua consulta devolve uma grande quantidade de dados e chama BeginTransaction, é lançado um SqlException porque SQL Server não permite transações paralelas ao usar MARS. Para evitar este problema, associe sempre uma transação ao comando, à ligação ou a ambos antes de abrir qualquer leitor.
Ver também
- Transactions (ADO.NET)
- Ligação a uma Fonte de Dados (ADO.NET)
- Usando o Data Provider do .NET Framework para SQL Server
- Visão geral ADO.NET
Aplica-se a
BeginTransaction(String)
Inicia uma transação na base de dados com o nome da transação especificado.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::String ^ transactionName);
public System.Data.SqlClient.SqlTransaction BeginTransaction(string transactionName);
member this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
override this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (transactionName As String) As SqlTransaction
Parâmetros
- transactionName
- String
O nome da transação.
Devoluções
Um objeto que representa a nova transação.
Exceções
Transações paralelas não são permitidas quando se utilizam Múltiplos Conjuntos de Resultados Ativos (MARS).
Transações paralelas não são suportadas.
Exemplos
O exemplo seguinte cria um SqlConnection e um SqlTransaction. Também demonstra como usar os BeginTransactionmétodos , a Commit, e Rollback .
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);
}
}
}
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' 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 ex As Exception
Console.WriteLine("Exception Type: {0}", ex.GetType())
Console.WriteLine(" Message: {0}", ex.Message)
' Attempt to roll back the transaction.
Try
transaction.Rollback("SampleTransaction")
Catch ex2 As Exception
' 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)
End Try
End Try
End Using
End Sub
Observações
Este comando corresponde à implementação do SQL Server do BEGIN TRANSACTION.
O comprimento do transactionName parâmetro não deve exceder 32 caracteres; caso contrário, será lançada uma exceção.
O valor no transactionName parâmetro pode ser usado em chamadas posteriores para Rollback e no savePoint parâmetro do Save método.
Deve explicitamente comprometer ou reverter a transação usando o Commit método ou Rollback . Para garantir que o modelo de gestão de transações do .NET Framework Data Provider for SQL Server funciona corretamente, evite usar outros modelos de gestão de transações, como o fornecido pelo SQL Server.
Para mais informações sobre SQL Server transações, consulte Transações (Transact-SQL).
Caution
Quando a sua consulta devolve uma grande quantidade de dados e chama BeginTransaction, é lançado um SqlException porque SQL Server não permite transações paralelas ao usar MARS. Para evitar este problema, associe sempre uma transação ao comando, à ligação ou a ambos antes de abrir qualquer leitor.
Ver também
- Transactions (ADO.NET)
- Ligação a uma Fonte de Dados (ADO.NET)
- Usando o Data Provider do .NET Framework para SQL Server
- Visão geral ADO.NET
Aplica-se a
BeginTransaction(IsolationLevel, String)
Inicia uma transação de base de dados com o nível de isolamento e o nome da transação especificados.
public:
System::Data::SqlClient::SqlTransaction ^ BeginTransaction(System::Data::IsolationLevel iso, System::String ^ transactionName);
public System.Data.SqlClient.SqlTransaction BeginTransaction(System.Data.IsolationLevel iso, string transactionName);
member this.BeginTransaction : System.Data.IsolationLevel * string -> System.Data.SqlClient.SqlTransaction
override this.BeginTransaction : System.Data.IsolationLevel * string -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel, transactionName As String) As SqlTransaction
Parâmetros
- iso
- IsolationLevel
O nível de isolamento sob o qual a transação deve decorrer.
- transactionName
- String
O nome da transação.
Devoluções
Um objeto que representa a nova transação.
Exceções
Transações paralelas não são permitidas quando se utilizam Múltiplos Conjuntos de Resultados Ativos (MARS).
Transações paralelas não são suportadas.
Exemplos
O exemplo seguinte cria um SqlConnection e um SqlTransaction. Também demonstra como usar os BeginTransactionmétodos , a Commit, e Rollback .
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.");
}
}
}
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' 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 e As Exception
Try
transaction.Rollback("SampleTransaction")
Catch ex As SqlException
If Not transaction.Connection Is Nothing Then
Console.WriteLine("An exception of type " & ex.GetType().ToString() & _
" was encountered while attempting to roll back the transaction.")
End If
End Try
Console.WriteLine("An exception of type " & e.GetType().ToString() & _
"was encountered while inserting the data.")
Console.WriteLine("Neither record was written to database.")
End Try
End Using
End Sub
Observações
Este comando corresponde à implementação do SQL Server do 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.
Deve explicitamente comprometer ou reverter a transação usando o Commit método ou Rollback . Para garantir que o modelo de gestão de transações do SQL Server funciona corretamente, evite usar outros modelos de gestão de transações, como o fornecido pelo SQL Server.
Note
Depois de uma transação ser comprometida ou revertida, o nível de isolamento da transação mantém-se para todos os comandos subsequentes que estejam em modo de autocommit (o padrão do SQL Server). Isto pode produzir resultados inesperados, como um nível de isolamento de LEITURA REPETÍVEL que persiste e bloqueia outros utilizadores fora de uma linha. Para redefinir o nível de isolamento para o padrão (READ COMMITTED), execute a instrução read commit do nível de isolamento da transação Transact-SQL set, ou chame SqlConnection.BeginTransaction seguida imediatamente por SqlTransaction.Commit. Para mais informações sobre SQL Server níveis de isolamento, consulte Transaction Isolation Levels.
Para mais informações sobre SQL Server transações, consulte Transações (Transact-SQL).
Caution
Quando a sua consulta devolve uma grande quantidade de dados e chama BeginTransaction, é lançado um SqlException porque SQL Server não permite transações paralelas ao usar MARS. Para evitar este problema, associe sempre uma transação ao comando, à ligação ou a ambos antes de abrir qualquer leitor.
Ver também
- Transactions (ADO.NET)
- Ligação a uma Fonte de Dados (ADO.NET)
- Usando o Data Provider do .NET Framework para SQL Server
- Visão geral ADO.NET