Bagikan melalui


SqlConnection.BeginTransaction Metode

Definisi

Memulai transaksi database.

Overload

BeginTransaction()

Memulai transaksi database.

BeginTransaction(IsolationLevel)

Memulai transaksi database dengan tingkat isolasi yang ditentukan.

BeginTransaction(String)

Memulai transaksi database dengan nama transaksi yang ditentukan.

BeginTransaction(IsolationLevel, String)

Memulai transaksi database dengan tingkat isolasi dan nama transaksi yang ditentukan.

BeginTransaction()

Memulai transaksi 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

Mengembalikan

Objek yang mewakili transaksi baru.

Pengecualian

Transaksi paralel tidak diizinkan saat menggunakan Beberapa Active Result Sets (MARS).

Transaksi paralel tidak didukung.

Contoh

Contoh berikut membuat SqlConnection dan SqlTransaction. Ini juga menunjukkan cara menggunakan BeginTransactionmetode , , Commitdan 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

Keterangan

Perintah ini memetakan ke implementasi SQL Server BEGIN TRANSACTION.

Anda harus secara eksplisit menerapkan atau mengembalikan transaksi menggunakan Commit metode atau Rollback . Untuk memastikan bahwa .NET Framework Data Provider untuk model manajemen transaksi SQL Server berkinerja dengan benar, hindari menggunakan model manajemen transaksi lain, seperti yang disediakan oleh SQL Server.

Catatan

Jika Anda tidak menentukan tingkat isolasi, tingkat isolasi default akan digunakan. Untuk menentukan tingkat isolasi dengan BeginTransaction metode , gunakan kelebihan beban yang mengambil iso parameter (BeginTransaction). Tingkat isolasi yang ditetapkan untuk transaksi tetap ada setelah transaksi selesai dan sampai koneksi ditutup atau dibuang. Mengatur tingkat isolasi ke Rekam Jepret dalam database di mana tingkat isolasi rekam jepret tidak diaktifkan tidak memberikan pengecualian. Transaksi akan selesai menggunakan tingkat isolasi default.

Perhatian

Jika transaksi dimulai dan kesalahan tingkat 16 atau lebih tinggi terjadi di server, transaksi tidak akan digulung balik sampai Read metode dipanggil. Tidak ada pengecualian yang dilemparkan pada ExecuteReader.

Perhatian

Saat kueri Anda mengembalikan sejumlah besar data dan panggilan BeginTransaction, akan SqlException ditampilkan karena SQL Server tidak mengizinkan transaksi paralel saat menggunakan MARS. Untuk menghindari masalah ini, selalu kaitkan transaksi dengan perintah, koneksi, atau keduanya sebelum pembaca terbuka.

Untuk informasi selengkapnya tentang transaksi SQL Server, lihat Transaksi (Transact-SQL).

Lihat juga

Berlaku untuk

BeginTransaction(IsolationLevel)

Memulai transaksi database dengan tingkat isolasi yang ditentukan.

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

Parameter

iso
IsolationLevel

Tingkat isolasi tempat transaksi harus berjalan.

Mengembalikan

Objek yang mewakili transaksi baru.

Pengecualian

Transaksi paralel tidak diizinkan saat menggunakan Beberapa Active Result Sets (MARS).

Transaksi paralel tidak didukung.

Contoh

Contoh berikut membuat SqlConnection dan SqlTransaction. Ini juga menunjukkan cara menggunakan BeginTransactionmetode , , Commitdan 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

Keterangan

Perintah ini memetakan ke implementasi SQL Server BEGIN TRANSACTION.

Anda harus secara eksplisit menerapkan atau mengembalikan transaksi menggunakan Commit metode atau Rollback . Untuk memastikan bahwa .NET Framework Data Provider untuk model manajemen transaksi SQL Server berkinerja dengan benar, hindari menggunakan model manajemen transaksi lain, seperti yang disediakan oleh SQL Server.

Catatan

Setelah transaksi dilakukan atau digulung balik, tingkat isolasi transaksi tetap ada untuk semua perintah berikutnya yang berada dalam mode autocommit (default SQL Server). Ini dapat menghasilkan hasil yang tidak terduga, seperti tingkat isolasi REPEATABLE READ yang bertahan dan mengunci pengguna lain dari baris. Untuk mengatur ulang tingkat isolasi ke default (READ COMMITTED), jalankan pernyataan TRANSACT-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED, atau panggil SqlConnection.BeginTransaction diikuti segera oleh SqlTransaction.Commit. Untuk informasi selengkapnya tentang tingkat isolasi SQL Server, lihat Tingkat Isolasi Transaksi.

Untuk informasi selengkapnya tentang transaksi SQL Server, lihat Transaksi (Transact-SQL).

Perhatian

Saat kueri Anda mengembalikan sejumlah besar data dan panggilan BeginTransaction, akan SqlException ditampilkan karena SQL Server tidak mengizinkan transaksi paralel saat menggunakan MARS. Untuk menghindari masalah ini, selalu kaitkan transaksi dengan perintah, koneksi, atau keduanya sebelum pembaca terbuka.

Lihat juga

Berlaku untuk

BeginTransaction(String)

Memulai transaksi database dengan nama transaksi yang ditentukan.

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

Parameter

transactionName
String

Nama transaksi.

Mengembalikan

Objek yang mewakili transaksi baru.

Pengecualian

Transaksi paralel tidak diizinkan saat menggunakan Beberapa Active Result Sets (MARS).

Transaksi paralel tidak didukung.

Contoh

Contoh berikut membuat SqlConnection dan SqlTransaction. Ini juga menunjukkan cara menggunakan BeginTransactionmetode , , Commitdan 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

Keterangan

Perintah ini memetakan ke implementasi SQL Server BEGIN TRANSACTION.

Panjang transactionName parameter tidak boleh melebihi 32 karakter; jika tidak, pengecualian akan dilemparkan.

Nilai dalam transactionName parameter dapat digunakan dalam panggilan nanti ke Rollback dan dalam savePoint parameter Save metode .

Anda harus secara eksplisit menerapkan atau mengembalikan transaksi menggunakan Commit metode atau Rollback . Untuk memastikan bahwa .NET Framework Data Provider untuk model manajemen transaksi SQL Server berkinerja dengan benar, hindari menggunakan model manajemen transaksi lain, seperti yang disediakan oleh SQL Server.

Untuk informasi selengkapnya tentang transaksi SQL Server, lihat Transaksi (Transact-SQL).

Perhatian

Saat kueri Anda mengembalikan sejumlah besar data dan panggilan BeginTransaction, akan SqlException ditampilkan karena SQL Server tidak mengizinkan transaksi paralel saat menggunakan MARS. Untuk menghindari masalah ini, selalu kaitkan transaksi dengan perintah, koneksi, atau keduanya sebelum pembaca terbuka.

Lihat juga

Berlaku untuk

BeginTransaction(IsolationLevel, String)

Memulai transaksi database dengan tingkat isolasi dan nama transaksi yang ditentukan.

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

Parameter

iso
IsolationLevel

Tingkat isolasi tempat transaksi harus berjalan.

transactionName
String

Nama transaksi.

Mengembalikan

Objek yang mewakili transaksi baru.

Pengecualian

Transaksi paralel tidak diizinkan saat menggunakan Beberapa Active Result Sets (MARS).

Transaksi paralel tidak didukung.

Contoh

Contoh berikut membuat SqlConnection dan SqlTransaction. Ini juga menunjukkan cara menggunakan BeginTransactionmetode , , Commitdan 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

Keterangan

Perintah ini memetakan ke implementasi SQL Server BEGIN TRANSACTION.

Nilai dalam transactionName parameter dapat digunakan dalam panggilan nanti ke Rollback dan dalam savePoint parameter Save metode .

Anda harus secara eksplisit menerapkan atau mengembalikan transaksi menggunakan Commit metode atau Rollback . Untuk memastikan bahwa model manajemen transaksi SQL Server berkinerja dengan benar, hindari menggunakan model manajemen transaksi lain, seperti yang disediakan oleh SQL Server.

Catatan

Setelah transaksi dilakukan atau digulung balik, tingkat isolasi transaksi tetap ada untuk semua perintah berikutnya yang berada dalam mode autocommit (default SQL Server). Ini dapat menghasilkan hasil yang tidak terduga, seperti tingkat isolasi REPEATABLE READ yang bertahan dan mengunci pengguna lain dari baris. Untuk mengatur ulang tingkat isolasi ke default (READ COMMITTED), jalankan pernyataan TRANSACT-SQL SET TRANSACTION ISOLATION LEVEL READ COMMITTED, atau panggil SqlConnection.BeginTransaction diikuti segera oleh SqlTransaction.Commit. Untuk informasi selengkapnya tentang tingkat isolasi SQL Server, lihat Tingkat Isolasi Transaksi.

Untuk informasi selengkapnya tentang transaksi SQL Server, lihat Transaksi (Transact-SQL).

Perhatian

Saat kueri Anda mengembalikan sejumlah besar data dan panggilan BeginTransaction, akan SqlException ditampilkan karena SQL Server tidak mengizinkan transaksi paralel saat menggunakan MARS. Untuk menghindari masalah ini, selalu kaitkan transaksi dengan perintah, koneksi, atau keduanya sebelum pembaca terbuka.

Lihat juga

Berlaku untuk