SqlConnection.BeginTransaction Metod

Definition

Startar en databastransaktion.

Överlagringar

Name Description
BeginTransaction()

Startar en databastransaktion.

BeginTransaction(IsolationLevel)

Startar en databastransaktion med den angivna isoleringsnivån.

BeginTransaction(String)

Startar en databastransaktion med det angivna transaktionsnamnet.

BeginTransaction(IsolationLevel, String)

Startar en databastransaktion med den angivna isoleringsnivån och transaktionsnamnet.

BeginTransaction()

Startar en databastransaktion.

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

Returer

Ett objekt som representerar den nya transaktionen.

Undantag

Parallella transaktioner tillåts inte när du använder flera aktiva resultatuppsättningar (MARS).

Parallella transaktioner stöds inte.

Exempel

I följande exempel skapas en SqlConnection och en SqlTransaction. Det visar också hur du använder BeginTransactionmetoderna , a Commitoch 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

Kommentarer

Det här kommandot mappar till SQL Server implementeringen av BEGIN TRANSACTION.

Du måste uttryckligen checka in eller återställa transaktionen med hjälp av Commit metoden eller Rollback . För att säkerställa att .NET Framework-Data Provider för SQL Server transaktionshanteringsmodell fungerar korrekt bör du undvika att använda andra transaktionshanteringsmodeller, till exempel den som tillhandahålls av SQL Server.

Note

Om du inte anger någon isoleringsnivå används standardisoleringsnivån. Om du vill ange en isoleringsnivå med BeginTransaction metoden använder du den överlagring som tar parametern iso (BeginTransaction). Isoleringsnivån för en transaktion kvarstår när transaktionen har slutförts och tills anslutningen stängs eller tas bort. Att ställa in isoleringsnivån på Ögonblicksbild i en databas där isoleringsnivån för ögonblicksbilder inte är aktiverad utlöser inget undantag. Transaktionen slutförs med standardisoleringsnivån.

Försiktighet

Om en transaktion startas och ett fel på nivå 16 eller högre inträffar på servern återställs inte transaktionen förrän Read metoden anropas. Inget undantag utlöses på ExecuteReader.

Försiktighet

När frågan returnerar en stor mängd data och anropar BeginTransaction genereras en SqlException eftersom SQL Server inte tillåter parallella transaktioner när MARS används. Undvik det här problemet genom att alltid associera en transaktion med kommandot, anslutningen eller båda innan någon läsare är öppen.

Mer information om SQL Server transaktioner finns i Transactions (Transact-SQL).

Se även

Gäller för

BeginTransaction(IsolationLevel)

Startar en databastransaktion med den angivna isoleringsnivån.

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

Parametrar

iso
IsolationLevel

Isoleringsnivån som transaktionen ska köras under.

Returer

Ett objekt som representerar den nya transaktionen.

Undantag

Parallella transaktioner tillåts inte när du använder flera aktiva resultatuppsättningar (MARS).

Parallella transaktioner stöds inte.

Exempel

I följande exempel skapas en SqlConnection och en SqlTransaction. Det visar också hur du använder BeginTransactionmetoderna , a Commitoch 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

Kommentarer

Det här kommandot mappar till SQL Server implementeringen av BEGIN TRANSACTION.

Du måste uttryckligen checka in eller återställa transaktionen med hjälp av Commit metoden eller Rollback . För att säkerställa att .NET Framework-Data Provider för SQL Server transaktionshanteringsmodell fungerar korrekt bör du undvika att använda andra transaktionshanteringsmodeller, till exempel den som tillhandahålls av SQL Server.

Note

När en transaktion har checkats in eller återställts sparas isoleringsnivån för transaktionen för alla efterföljande kommandon som är i automatiskt återtagandeläge (SQL Server standard). Detta kan ge oväntade resultat, till exempel en isoleringsnivå för REPEATABLE READ som bevarar och låser andra användare från en rad. Om du vill återställa isoleringsnivån till standardinställningen (READ COMMITTED) kör du instruktionen Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED eller anropar SqlConnection.BeginTransaction följt omedelbart av SqlTransaction.Commit. Mer information om SQL Server isoleringsnivåer finns i Transaction Isolation Levels.

Mer information om SQL Server transaktioner finns i Transactions (Transact-SQL).

Försiktighet

När frågan returnerar en stor mängd data och anropar BeginTransaction genereras en SqlException eftersom SQL Server inte tillåter parallella transaktioner när MARS används. Undvik det här problemet genom att alltid associera en transaktion med kommandot, anslutningen eller båda innan någon läsare är öppen.

Se även

Gäller för

BeginTransaction(String)

Startar en databastransaktion med det angivna transaktionsnamnet.

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

Parametrar

transactionName
String

Namnet på transaktionen.

Returer

Ett objekt som representerar den nya transaktionen.

Undantag

Parallella transaktioner tillåts inte när du använder flera aktiva resultatuppsättningar (MARS).

Parallella transaktioner stöds inte.

Exempel

I följande exempel skapas en SqlConnection och en SqlTransaction. Det visar också hur du använder BeginTransactionmetoderna , a Commitoch 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

Kommentarer

Det här kommandot mappar till SQL Server implementeringen av BEGIN TRANSACTION.

Parameterns transactionName längd får inte överstiga 32 tecken. Annars genereras ett undantag.

Värdet i parametern transactionName kan användas i senare anrop till Rollback och i parametern savePoint för Save metoden.

Du måste uttryckligen checka in eller återställa transaktionen med hjälp av Commit metoden eller Rollback . För att säkerställa att .NET Framework-Data Provider för SQL Server transaktionshanteringsmodell fungerar korrekt bör du undvika att använda andra transaktionshanteringsmodeller, till exempel den som tillhandahålls av SQL Server.

Mer information om SQL Server transaktioner finns i Transactions (Transact-SQL).

Försiktighet

När frågan returnerar en stor mängd data och anropar BeginTransaction genereras en SqlException eftersom SQL Server inte tillåter parallella transaktioner när MARS används. Undvik det här problemet genom att alltid associera en transaktion med kommandot, anslutningen eller båda innan någon läsare är öppen.

Se även

Gäller för

BeginTransaction(IsolationLevel, String)

Startar en databastransaktion med den angivna isoleringsnivån och transaktionsnamnet.

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

Parametrar

iso
IsolationLevel

Isoleringsnivån som transaktionen ska köras under.

transactionName
String

Namnet på transaktionen.

Returer

Ett objekt som representerar den nya transaktionen.

Undantag

Parallella transaktioner tillåts inte när du använder flera aktiva resultatuppsättningar (MARS).

Parallella transaktioner stöds inte.

Exempel

I följande exempel skapas en SqlConnection och en SqlTransaction. Det visar också hur du använder BeginTransactionmetoderna , a Commitoch 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

Kommentarer

Det här kommandot mappar till SQL Server implementeringen av BEGIN TRANSACTION.

Värdet i parametern transactionName kan användas i senare anrop till Rollback och i parametern savePoint för Save metoden.

Du måste uttryckligen checka in eller återställa transaktionen med hjälp av Commit metoden eller Rollback . För att säkerställa att SQL Server transaktionshanteringsmodell fungerar korrekt bör du undvika att använda andra transaktionshanteringsmodeller, till exempel den som tillhandahålls av SQL Server.

Note

När en transaktion har checkats in eller återställts sparas isoleringsnivån för transaktionen för alla efterföljande kommandon som är i automatiskt återtagandeläge (SQL Server standard). Detta kan ge oväntade resultat, till exempel en isoleringsnivå för REPEATABLE READ som bevarar och låser andra användare från en rad. Om du vill återställa isoleringsnivån till standardinställningen (READ COMMITTED) kör du instruktionen Transact-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED eller anropar SqlConnection.BeginTransaction följt omedelbart av SqlTransaction.Commit. Mer information om SQL Server isoleringsnivåer finns i Transaction Isolation Levels.

Mer information om SQL Server transaktioner finns i Transactions (Transact-SQL).

Försiktighet

När frågan returnerar en stor mängd data och anropar BeginTransaction genereras en SqlException eftersom SQL Server inte tillåter parallella transaktioner när MARS används. Undvik det här problemet genom att alltid associera en transaktion med kommandot, anslutningen eller båda innan någon läsare är öppen.

Se även

Gäller för