SqlConnection.BeginTransaction Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Avvia una transazione di database.
Overload
| Nome | Descrizione |
|---|---|
| BeginTransaction() |
Avvia una transazione di database. |
| BeginTransaction(IsolationLevel) |
Avvia una transazione di database con il livello di isolamento specificato. |
| BeginTransaction(String) |
Avvia una transazione di database con il nome della transazione specificato. |
| BeginTransaction(IsolationLevel, String) |
Avvia una transazione di database con il livello di isolamento e il nome della transazione specificati. |
BeginTransaction()
Avvia una transazione di database.
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
Valori restituiti
Oggetto che rappresenta la nuova transazione.
Eccezioni
Le transazioni parallele non sono consentite quando si usano più set di risultati attivi (MARS).
Le transazioni parallele non sono supportate.
Esempio
Nell'esempio seguente viene creato un SqlConnection oggetto e un oggetto SqlTransaction. Viene inoltre illustrato come usare i BeginTransactionmetodi , a Commite 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
Commenti
Questo comando esegue il mapping all'implementazione SQL Server di BEGIN TRANSACTION.
È necessario eseguire il commit o il rollback esplicito della transazione usando il Commit metodo o Rollback . Per assicurarsi che il provider di dati framework di .NET per SQL Server modello di gestione delle transazioni funzioni correttamente, evitare l'uso di altri modelli di gestione delle transazioni, ad esempio quello fornito da SQL Server.
Note
Se non si specifica un livello di isolamento, viene usato il livello di isolamento predefinito. Per specificare un livello di isolamento con il BeginTransaction metodo , usare l'overload che accetta il iso parametro (BeginTransaction). Il livello di isolamento impostato per una transazione persiste dopo il completamento della transazione e fino a quando la connessione non viene chiusa o eliminata. L'impostazione del livello di isolamento su Snapshot in un database in cui il livello di isolamento dello snapshot non è abilitato non genera un'eccezione. La transazione verrà completata usando il livello di isolamento predefinito.
Caution
Se viene avviata una transazione e si verifica un errore di livello 16 o superiore nel server, non verrà eseguito il rollback della transazione fino a quando non viene richiamato il Read metodo. Non viene generata alcuna eccezione in ExecuteReader.
Caution
Quando la query restituisce una grande quantità di dati e chiama BeginTransaction, viene generata una SqlException perché SQL Server non consente transazioni parallele quando si usa MARS. Per evitare questo problema, associare sempre una transazione al comando, alla connessione o a entrambi prima che tutti i lettori siano aperti.
Per altre informazioni sulle transazioni SQL Server, vedere Transactions (Transact-SQL).
Vedi anche
- Transazioni e concorrenza
- Connessione a un'origine dati in ADO.NET
- SQL Server e ADO.NET
- Panoramica di ADO.NET
Si applica a
BeginTransaction(IsolationLevel)
Avvia una transazione di database con il livello di isolamento specificato.
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
Parametri
- iso
- IsolationLevel
Livello di isolamento in base al quale deve essere eseguita la transazione.
Valori restituiti
Oggetto che rappresenta la nuova transazione.
Eccezioni
Le transazioni parallele non sono consentite quando si usano più set di risultati attivi (MARS).
Le transazioni parallele non sono supportate.
Esempio
Nell'esempio seguente viene creato un SqlConnection oggetto e un oggetto SqlTransaction. Viene inoltre illustrato come usare i BeginTransactionmetodi , a Commite 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
Commenti
Questo comando esegue il mapping all'implementazione SQL Server di BEGIN TRANSACTION.
È necessario eseguire il commit o il rollback esplicito della transazione usando il Commit metodo o Rollback . Per assicurarsi che il provider di dati framework di .NET per SQL Server modello di gestione delle transazioni funzioni correttamente, evitare l'uso di altri modelli di gestione delle transazioni, ad esempio quello fornito da SQL Server.
Note
Dopo il commit o il rollback di una transazione, il livello di isolamento della transazione viene mantenuto per tutti i comandi successivi in modalità autocommit (impostazione predefinita SQL Server). Ciò può produrre risultati imprevisti, ad esempio un livello di isolamento di REPEATABLE READ persistente e il blocco di altri utenti all'esterno di una riga. Per reimpostare il livello di isolamento sul valore predefinito (READ COMMITTED), eseguire l'istruzione Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED oppure chiamare SqlConnection.BeginTransaction seguito immediatamente da SqlTransaction.Commit. Per altre informazioni sui livelli di isolamento SQL Server, vedere Transaction Isolation Levels.
Per altre informazioni sulle transazioni SQL Server, vedere Transactions (Transact-SQL).
Caution
Quando la query restituisce una grande quantità di dati e chiama BeginTransaction, viene generata una SqlException perché SQL Server non consente transazioni parallele quando si usa MARS. Per evitare questo problema, associare sempre una transazione al comando, alla connessione o a entrambi prima che tutti i lettori siano aperti.
Vedi anche
- Transactions (ADO.NET)
- Connessione a un'origine dati (ADO.NET)
- Uso del provider di dati .NET Framework per SQL Server
- Panoramica di ADO.NET
Si applica a
BeginTransaction(String)
Avvia una transazione di database con il nome della transazione specificato.
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
Parametri
- transactionName
- String
Nome della transazione.
Valori restituiti
Oggetto che rappresenta la nuova transazione.
Eccezioni
Le transazioni parallele non sono consentite quando si usano più set di risultati attivi (MARS).
Le transazioni parallele non sono supportate.
Esempio
Nell'esempio seguente viene creato un SqlConnection oggetto e un oggetto SqlTransaction. Viene inoltre illustrato come usare i BeginTransactionmetodi , a Commite 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
Commenti
Questo comando esegue il mapping all'implementazione SQL Server di BEGIN TRANSACTION.
La lunghezza del transactionName parametro non deve superare i 32 caratteri. In caso contrario, verrà generata un'eccezione.
Il valore nel transactionName parametro può essere usato nelle chiamate successive a Rollback e nel savePoint parametro del Save metodo .
È necessario eseguire il commit o il rollback esplicito della transazione usando il Commit metodo o Rollback . Per assicurarsi che il provider di dati framework di .NET per SQL Server modello di gestione delle transazioni funzioni correttamente, evitare l'uso di altri modelli di gestione delle transazioni, ad esempio quello fornito da SQL Server.
Per altre informazioni sulle transazioni SQL Server, vedere Transactions (Transact-SQL).
Caution
Quando la query restituisce una grande quantità di dati e chiama BeginTransaction, viene generata una SqlException perché SQL Server non consente transazioni parallele quando si usa MARS. Per evitare questo problema, associare sempre una transazione al comando, alla connessione o a entrambi prima che tutti i lettori siano aperti.
Vedi anche
- Transactions (ADO.NET)
- Connessione a un'origine dati (ADO.NET)
- Uso del provider di dati .NET Framework per SQL Server
- Panoramica di ADO.NET
Si applica a
BeginTransaction(IsolationLevel, String)
Avvia una transazione di database con il livello di isolamento e il nome della transazione specificati.
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
Parametri
- iso
- IsolationLevel
Livello di isolamento in base al quale deve essere eseguita la transazione.
- transactionName
- String
Nome della transazione.
Valori restituiti
Oggetto che rappresenta la nuova transazione.
Eccezioni
Le transazioni parallele non sono consentite quando si usano più set di risultati attivi (MARS).
Le transazioni parallele non sono supportate.
Esempio
Nell'esempio seguente viene creato un SqlConnection oggetto e un oggetto SqlTransaction. Viene inoltre illustrato come usare i BeginTransactionmetodi , a Commite 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
Commenti
Questo comando esegue il mapping all'implementazione SQL Server di BEGIN TRANSACTION.
Il valore nel transactionName parametro può essere usato nelle chiamate successive a Rollback e nel savePoint parametro del Save metodo .
È necessario eseguire il commit o il rollback esplicito della transazione usando il Commit metodo o Rollback . Per assicurarsi che il modello di gestione delle transazioni SQL Server funzioni correttamente, evitare di usare altri modelli di gestione delle transazioni, ad esempio quello fornito da SQL Server.
Note
Dopo il commit o il rollback di una transazione, il livello di isolamento della transazione viene mantenuto per tutti i comandi successivi in modalità autocommit (impostazione predefinita SQL Server). Ciò può produrre risultati imprevisti, ad esempio un livello di isolamento di REPEATABLE READ persistente e il blocco di altri utenti all'esterno di una riga. Per reimpostare il livello di isolamento sul valore predefinito (READ COMMITTED), eseguire l'istruzione Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED oppure chiamare SqlConnection.BeginTransaction seguito immediatamente da SqlTransaction.Commit. Per altre informazioni sui livelli di isolamento SQL Server, vedere Transaction Isolation Levels.
Per altre informazioni sulle transazioni SQL Server, vedere Transactions (Transact-SQL).
Caution
Quando la query restituisce una grande quantità di dati e chiama BeginTransaction, viene generata una SqlException perché SQL Server non consente transazioni parallele quando si usa MARS. Per evitare questo problema, associare sempre una transazione al comando, alla connessione o a entrambi prima che tutti i lettori siano aperti.
Vedi anche
- Transactions (ADO.NET)
- Connessione a un'origine dati (ADO.NET)
- Uso del provider di dati .NET Framework per SQL Server
- Panoramica di ADO.NET