Condividi tramite


SqlConnection.BeginTransaction Metodo

Definizione

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:
 Microsoft::Data::SqlClient::SqlTransaction ^ BeginTransaction();
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction ();
override this.BeginTransaction : unit -> Microsoft.Data.SqlClient.SqlTransaction
Public Function BeginTransaction () As SqlTransaction

Restituisce

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 viene creato un SqlConnection oggetto e un SqlTransactionoggetto . Illustra anche come usare i BeginTransactionmetodi , a 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);
                    }
                }
            }
        }
    }
}

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 .NET Framework per SQL Server modello di gestione delle transazioni venga eseguito correttamente, evitare l'uso di 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 metodo, usare l'overload BeginTransaction 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.

Attenzione

Se una transazione viene avviata e si verifica un errore di livello 16 o superiore nel server, la transazione non verrà eseguito il rollback finché il Read metodo non viene richiamato. Nessuna eccezione viene generata in ExecuteReader.

Attenzione

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

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

Si applica a

BeginTransaction(IsolationLevel)

Inizia una transazione di database con il livello di isolamento specificato.

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

Parametri

iso
IsolationLevel

Livello di isolamento in cui eseguire la transazione.

Restituisce

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 viene creato un SqlConnection oggetto e un SqlTransactionoggetto . Illustra anche come usare i BeginTransactionmetodi , a 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.");
            }
        }
    }
}

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 .NET Framework per SQL Server modello di gestione delle transazioni venga eseguito correttamente, evitare l'uso di 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 persiste per tutti i comandi successivi in modalità autocommit (il SQL Server predefinito). Ciò può produrre risultati imprevisti, ad esempio un livello di isolamento di REPEATABLE READ persistente e bloccando altri utenti fuori da una riga. Per reimpostare il livello di isolamento al valore predefinito (READ COMMIT), eseguire l'istruzione Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMIT o la chiamata SqlConnection.BeginTransaction seguita immediatamente da SqlTransaction.Commit. Per altre informazioni sui livelli di isolamento SQL Server, vedere Livelli di isolamento delle transazioni.

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

Attenzione

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

Si applica a

BeginTransaction(String)

Avvia una transazione di database con il nome della transazione specificato.

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

Parametri

transactionName
String

Nome della transazione.

Restituisce

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 viene creato un SqlConnection oggetto e un SqlTransactionoggetto . Illustra anche come usare i BeginTransactionmetodi , a 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);
                    }
                }
            }
        }
    }
}

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 del 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 .NET per SQL Server modello di gestione delle transazioni venga eseguito 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 Transazioni (Transact-SQL).

Attenzione

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

Si applica a

BeginTransaction(IsolationLevel, String)

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

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

Parametri

iso
IsolationLevel

Livello di isolamento in cui eseguire la transazione.

transactionName
String

Nome della transazione.

Restituisce

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 viene creato un SqlConnection oggetto e un SqlTransactionoggetto . Illustra anche come usare i BeginTransactionmetodi , a 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.");
                }
            }
        }
    }
}

Commenti

Questo comando esegue il mapping all'implementazione SQL Server di BEGIN TRANSACTION.

Il valore del 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 venga eseguito correttamente, evitare l'uso di 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 persiste per tutti i comandi successivi in modalità autocommit (il SQL Server predefinito). Ciò può produrre risultati imprevisti, ad esempio un livello di isolamento di REPEATABLE READ persistente e bloccando altri utenti fuori da una riga. Per reimpostare il livello di isolamento al valore predefinito (READ COMMIT), eseguire l'istruzione Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMIT o la chiamata SqlConnection.BeginTransaction seguita immediatamente da SqlTransaction.Commit. Per altre informazioni sui livelli di isolamento SQL Server, vedere Livelli di isolamento delle transazioni.

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

Attenzione

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

Si applica a