SqlConnection.BeginTransaction Metodo

Definizione

Avvia una transazione di database.

Overload

BeginTransaction()

Avvia una transazione di database.

BeginTransaction(IsolationLevel)

Inizia 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 nome della transazione e il livello di isolamento specificato.

BeginTransaction()

Avvia una transazione di database.

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

Restituisce

SqlTransaction

Oggetto che rappresenta la nuova transazione.

Eccezioni

Le transazioni parallele non sono consentite quando si usa MARS (Multiple Active Result Sets).

Le transazioni parallele non sono supportate.

Esempio

Nell'esempio seguente vengono creati un SqlConnection oggetto e un oggetto SqlTransaction . Viene inoltre illustrato come usare i BeginTransaction metodi , , e Commit 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();
            }
            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("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 in modo esplicito il commit o il rollback della transazione usando Commit il metodo o Rollback . Per assicurarsi che il modello .NET Framework provider di dati per SQL Server di gestione delle transazioni funzioni correttamente, evitare di usare altri modelli di gestione delle transazioni, ad esempio quello fornito da SQL Server.

Nota

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 viene mantenuto 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.

Attenzione

Se una transazione viene avviata e si verifica un errore di livello 16 o superiore nel server, non verrà eseguito il rollback della transazione fino a quando non viene Read richiamato il metodo . Non viene generata alcuna eccezione in ExecuteReader.

Attenzione

Quando la query restituisce una grande quantità di dati e chiama , viene generata un'eccezione perché SQL Server non consente transazioni parallele quando si BeginTransaction SqlException usa MARS. Per evitare questo problema, associare sempre una transazione al comando, alla connessione o a entrambi prima che i lettori siano aperti.

Per altre informazioni sulle SQL Server, vedere Transactions (Transact-SQL).

Vedi anche

Si applica a

BeginTransaction(IsolationLevel)

Inizia 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);
override this.BeginTransaction : System.Data.IsolationLevel -> System.Data.SqlClient.SqlTransaction
member this.BeginTransaction : System.Data.IsolationLevel -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (iso As IsolationLevel) As SqlTransaction

Parametri

iso
IsolationLevel

Livello di isolamento in cui eseguire la transazione.

Restituisce

SqlTransaction

Oggetto che rappresenta la nuova transazione.

Eccezioni

Le transazioni parallele non sono consentite quando si usa MARS (Multiple Active Result Sets).

Le transazioni parallele non sono supportate.

Esempio

Nell'esempio seguente vengono creati un SqlConnection oggetto e un oggetto SqlTransaction . Viene inoltre illustrato come usare i BeginTransaction metodi , , e Commit 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 in modo esplicito il commit o il rollback della transazione usando Commit il metodo o Rollback . Per assicurarsi che il modello .NET Framework provider di dati per SQL Server di gestione delle transazioni funzioni correttamente, evitare di usare altri modelli di gestione delle transazioni, ad esempio quello fornito da SQL Server.

Nota

Dopo il commit o il rollback di una transazione, il livello di isolamento della transazione viene mantenuto per tutti i comandi successivi in modalità di commit automatico (impostazione SQL Server predefinita). Ciò può produrre risultati imprevisti, ad esempio un livello di isolamento REPEATABLE READ che rende persistenti e blocca altri utenti da una riga. Per reimpostare il livello di isolamento sul valore predefinito (READ COMMITTED), eseguire l'istruzione Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED o chiamare SqlConnection.BeginTransaction seguita immediatamente da SqlTransaction.Commit . Per altre informazioni sui livelli SQL Server isolamento, vedere Livelli di isolamento delle transazioni.

Per altre informazioni sulle SQL Server, vedere Transactions (Transact-SQL).

Attenzione

Quando la query restituisce una grande quantità di dati e chiama , viene generata un'eccezione perché SQL Server non consente transazioni parallele quando si BeginTransaction SqlException usa MARS. Per evitare questo problema, associare sempre una transazione al comando, alla connessione o a entrambi prima che i lettori siano aperti.

Vedi anche

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);
override this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
member this.BeginTransaction : string -> System.Data.SqlClient.SqlTransaction
Public Function BeginTransaction (transactionName As String) As SqlTransaction

Parametri

transactionName
String

Nome della transazione.

Restituisce

SqlTransaction

Oggetto che rappresenta la nuova transazione.

Eccezioni

Le transazioni parallele non sono consentite quando si usa MARS (Multiple Active Result Sets).

Le transazioni parallele non sono supportate.

Esempio

Nell'esempio seguente vengono creati un SqlConnection oggetto e un oggetto SqlTransaction . Viene inoltre illustrato come usare i BeginTransaction metodi , , e Commit 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();
            }
            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()

            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 parametro non deve superare i 32 caratteri. In caso contrario, verrà transactionName generata un'eccezione.

Il valore nel transactionName parametro può essere usato nelle chiamate successive a e nel parametro del metodo Rollback savePoint Save .

È necessario eseguire in modo esplicito il commit o il rollback della transazione usando Commit il metodo o Rollback . Per assicurarsi che il modello .NET Framework provider di dati per SQL Server di gestione delle transazioni funzioni correttamente, evitare di usare altri modelli di gestione delle transazioni, ad esempio quello fornito da SQL Server.

Per altre informazioni sulle SQL Server, vedere Transactions (Transact-SQL).

Attenzione

Quando la query restituisce una grande quantità di dati e chiama , viene generata un'eccezione perché SQL Server non consente transazioni parallele quando si BeginTransaction SqlException usa MARS. Per evitare questo problema, associare sempre una transazione al comando, alla connessione o a entrambi prima che i lettori siano aperti.

Vedi anche

Si applica a

BeginTransaction(IsolationLevel, String)

Avvia una transazione di database con il nome della transazione e il livello di isolamento specificato.

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);
override this.BeginTransaction : System.Data.IsolationLevel * string -> System.Data.SqlClient.SqlTransaction
member 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 cui eseguire la transazione.

transactionName
String

Nome della transazione.

Restituisce

SqlTransaction

Oggetto che rappresenta la nuova transazione.

Eccezioni

Le transazioni parallele non sono consentite quando si usa MARS (Multiple Active Result Sets).

Le transazioni parallele non sono supportate.

Esempio

Nell'esempio seguente vengono creati un SqlConnection oggetto e un oggetto SqlTransaction . Viene inoltre illustrato come usare i BeginTransaction metodi , , e Commit 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();
            }
            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()
            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 e nel parametro del metodo Rollback savePoint Save .

È necessario eseguire in modo esplicito il commit o il rollback della transazione usando Commit il metodo o Rollback . Per assicurarsi che il modello SQL Server di gestione delle transazioni funzioni correttamente, evitare di usare altri modelli di gestione delle transazioni, ad esempio quello fornito da SQL Server.

Nota

Dopo il commit o il rollback di una transazione, il livello di isolamento della transazione viene mantenuto per tutti i comandi successivi in modalità di commit automatico (impostazione SQL Server predefinita). Ciò può produrre risultati imprevisti, ad esempio un livello di isolamento REPEATABLE READ che rende persistenti e blocca altri utenti da una riga. Per reimpostare il livello di isolamento sul valore predefinito (READ COMMITTED), eseguire l'istruzione Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED o chiamare SqlConnection.BeginTransaction seguita immediatamente da SqlTransaction.Commit . Per altre informazioni sui livelli SQL Server isolamento, vedere Livelli di isolamento delle transazioni.

Per altre informazioni sulle SQL Server, vedere Transactions (Transact-SQL).

Attenzione

Quando la query restituisce una grande quantità di dati e chiama , viene generata un'eccezione perché SQL Server non consente transazioni parallele quando si BeginTransaction SqlException usa MARS. Per evitare questo problema, associare sempre una transazione al comando, alla connessione o a entrambi prima che i lettori siano aperti.

Vedi anche

Si applica a