Junior
Bir işlem nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
C# ve veritabanları/dağıtılmış sistemler bağlamında bir işlem, tek bir bütün olarak gerçekleştirilen bir dizi işlemdir (atomik çalışma birimi). İşlemdeki tüm işlemler başarıyla tamamlanırsa (onaylanır), veya hiçbiri yapılmaz (geri alınır).
İşlemler, ACID özelliklerine sahiptir:
- Atomiklik: Tüm işlemler başarıyla tamamlanır veya hiçbiri yapılmaz.
- Tutarlılık: İşlem, sistemi bir tutarlı durumdan diğerine geçirir.
- İzolasyon: Paralel olarak yürütülen işlemler birbirini etkilemez.
- Dayanıklılık: Başarıyla tamamlanan işlemin sonuçları, sistem arızalarına rağmen korunur.
C#'ta işlemlerle çalışmak için genellikle şu sınıflar kullanılır:
System.Data.Common.DbTransaction(veritabanı işlemleri için temel sınıf)System.Transactions.TransactionScope(dağıtılmış işlemlerin yönetimini kolaylaştırır)- Spesifik ADO.NET sağlayıcı işlem sınıfları (örneğin,
System.Data.SqlClient.SqlTransaction)
TransactionScope kullanımına örnek:
// İşlemi otomatik yönetmek için TransactionScope kullanımı
using System;
using System.Data.SqlClient;
using System.Transactions;
// Bağlantı dizesinin mevcut olduğu varsayılır
string connectionString = "...";
try
{
using (var scope = new TransactionScope())
{
using (var connection1 = new SqlConnection(connectionString))
{
connection1.Open();
using (var command1 = new SqlCommand("UPDATE Accounts SET Balance = Balance - 100 WHERE AccountId = 1", connection1))
{
command1.ExecuteNonQuery();
}
}
using (var connection2 = new SqlConnection(connectionString))
{
connection2.Open();
// Hata simülasyonu, geri alma işlemini göstermek için
// Gerçek UPDATE/INSERT/DELETE kullanın
// using (var command2 = new SqlCommand("UPDATE Accounts SET Balance = Balance + 100 WHERE AccountId = 2", connection2))
// {
// command2.ExecuteNonQuery();
// }
throw new InvalidOperationException("Hata simülasyonu"); // Hata taklidi
}
// Tüm işlemler başarılıysa, Complete çağrılır
scope.Complete();
Console.WriteLine("İşlem onaylandı.");
}
}
catch (Exception ex)
{
// Hata durumunda, TransactionScope otomatik olarak işlemi geri alır
Console.WriteLine($"İşlem geri alındı. Hata: {ex.Message}");
}