Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: .NET Framework
.NET
.NET Standard
Transaksi adalah serangkaian tugas yang saling terkait yang dijalankan sebagai satu kesatuan, yang antara lain dapat berhasil (commit) atau gagal (abort). Sebuah transaksi terdistribusi adalah transaksi yang memengaruhi beberapa sumber daya. Agar transaksi terdistribusi dapat dikomitkan, semua peserta harus menjamin bahwa setiap perubahan terhadap data akan bersifat permanen. Perubahan harus tetap ada meskipun terjadi crash pada sistem atau terjadi peristiwa tak terduga lainnya. Bahkan jika satu peserta gagal membuat jaminan ini, maka seluruh transaksi gagal, dan setiap perubahan pada data dalam cakupan transaksi akan digulung balik.
Catatan
Untuk informasi tentang transaksi terdistribusi di Azure SQL Database dan Azure SQL Managed Instance, lihat Transaksi terdistribusi di seluruh database cloud.
Bekerja dengan System.Transactions
Dalam .NET, transaksi terdistribusi dikelola melalui API dalam namespace System.Transactions. API System.Transactions akan mengirimkan penanganan transaksi terdistribusi ke monitor transaksi seperti Koordinator Transaksi Terdistribusi Microsoft (MS DTC) ketika beberapa manajer sumber daya persisten terlibat. Untuk informasi selengkapnya, lihat Dasar-Dasar Transaksi.
ADO.NET 2.0 memperkenalkan dukungan untuk mendaftar dalam transaksi terdistribusi menggunakan metode EnlistTransaction, yang mendaftarkan koneksi dalam Transaction instans. Pada versi ADO.NET sebelumnya, pendaftaran eksplisit dalam transaksi terdistribusi dilakukan menggunakan EnlistDistributedTransaction metode koneksi untuk mendaftar koneksi dalam sebuah ITransaction instance, yang didukung untuk kompatibilitas mundur. Untuk informasi selengkapnya tentang transaksi Layanan Enterprise, lihat Interoperabilitas dengan Layanan Perusahaan dan Transaksi COM+.
Saat menggunakan transaksi System.Transactions dengan Penyedia Data Microsoft SqlClient untuk SQL Server pada database SQL Server, Transaction ringan akan digunakan secara otomatis. Transaksi kemudian dapat dipromosikan ke transaksi terdistribusi penuh sesuai kebutuhan. Untuk informasi selengkapnya, lihat Integrasi System.Transactions dengan SQL Server.
Mendaftarkan secara otomatis dalam transaksi terdistribusi
Pendaftaran otomatis adalah cara default (dan pilihan) untuk mengintegrasikan koneksi ADO.NET dengan System.Transactions. Objek koneksi akan secara otomatis mendaftar dalam transaksi terdistribusi yang ada jika menentukan bahwa transaksi aktif, yang, dalam hal System.Transaction, berarti Transaction.Current tidak null. Pendaftaran transaksi otomatis terjadi ketika koneksi dibuka. Hal ini tidak akan terjadi setelahnya bahkan jika sebuah perintah dijalankan dalam lingkup transaksi. Anda dapat menonaktifkan pendaftaran otomatis dalam transaksi yang ada dengan menentukan Enlist=false sebagai parameter string koneksi untuk SqlConnection.ConnectionString.
Mendaftar secara manual dalam transaksi terdistribusi
Jika pendaftaran otomatis dinonaktifkan atau Anda perlu mendaftarkan transaksi yang dimulai setelah koneksi dibuka, Anda dapat mendaftarkan transaksi terdistribusi yang ada menggunakan EnlistTransaction metode SqlConnection objek untuk Penyedia Data Microsoft SqlClient untuk SQL Server. Mendaftar dalam transaksi terdistribusi yang ada memastikan bahwa, jika transaksi diterapkan atau digulung balik, modifikasi yang dibuat oleh kode pada sumber data juga akan dilakukan atau digulung balik.
Catatan
Pengecualian akan dilemparkan jika Anda mencoba melakukan commit atau rollback pada transaksi ketika DataReader dimulai saat transaksi masih aktif.
Keikutsertaan dalam transaksi terdistribusi sangat relevan terutama saat melakukan pooling objek bisnis. Jika objek bisnis dikumpulkan dengan koneksi terbuka, pendaftaran transaksi otomatis hanya terjadi saat koneksi tersebut dibuka. Jika beberapa transaksi dilakukan menggunakan objek bisnis yang dikumpulkan, koneksi terbuka untuk objek tersebut tidak akan secara otomatis mendaftar dalam transaksi yang baru dimulai. Dalam hal ini, Anda dapat menonaktifkan pendaftaran transaksi otomatis untuk koneksi dan mendaftarkan koneksi dalam transaksi menggunakan EnlistTransaction.
EnlistTransaction mengambil satu argumen jenis Transaction yang merupakan referensi ke transaksi yang ada. Setelah memanggil metode EnlistTransaction milik koneksi, semua modifikasi yang dibuat pada sumber data menggunakan koneksi tersebut akan disertakan dalam transaksi. Meneruskan nilai null akan mengeluarkan koneksi dari pendaftaran transaksi terdistribusi saat ini. Perhatikan bahwa koneksi harus dibuka sebelum memanggil EnlistTransaction.
Catatan
Setelah sebuah koneksi secara eksplisit didaftarkan ke dalam suatu transaksi, koneksi tersebut tidak dapat dikeluarkan dari transaksi itu atau didaftarkan ke transaksi lain hingga transaksi pertama selesai.
Perhatian
EnlistTransaction melempar pengecualian jika koneksi telah memulai transaksi menggunakan metode koneksi BeginTransaction. Namun, jika transaksi adalah transaksi lokal yang dimulai di sumber data (misalnya, menjalankan pernyataan BEGIN TRANSACTION secara eksplisit menggunakan SqlCommand), EnlistTransaction akan mengembalikan transaksi lokal dan mendaftarkan dalam transaksi terdistribusi yang ada seperti yang diminta. Anda tidak akan menerima pemberitahuan bahwa transaksi lokal digulung balik, dan harus mengelola transaksi lokal apa pun yang tidak mulai menggunakan BeginTransaction. Jika Anda menggunakan Microsoft SqlClient Data Provider for SQL Server dengan SQL Server, upaya untuk bergabung akan memunculkan pengecualian. Semua kasus lain tidak akan terdeteksi.
Transaksi yang dapat dipromosikan di SQL Server
SQL Server mendukung transaksi yang dapat dipromosikan di mana transaksi ringan lokal dapat secara otomatis dipromosikan ke transaksi terdistribusi hanya jika diperlukan. Transaksi yang dapat dipromosikan tidak menimbulkan overhead tambahan dari transaksi terdistribusi kecuali jika overhead tambahan tersebut diperlukan. Untuk informasi selengkapnya dan sampel kode, lihat Integrasi System.Transactions dengan SQL Server.
Mengonfigurasi Transaksi Terdistribusi
Anda mungkin perlu mengaktifkan MS DTC melalui jaringan untuk menggunakan transaksi terdistribusi. Jika Windows Firewall lokal server diaktifkan, Anda harus mengizinkan layanan MS DTC untuk menggunakan jaringan atau membuka port MS DTC.