Ado.Net Transaction

Merhaba.

Kısaca "Transaction" kavramını açıklayacak olursak;
Verileriniz üzerinde işlem yaparken yapmak istediğiniz işlem yarım kalabilir, işlemin bir bölümü gerçekleşir ve bir bölümü gerçekleşmez ise bu hatalara neden olabilir. Örneğin bir muhasebe fişi firiyorsunuz.Fiş kayıt işlemi gerçekleştirdiniz ve hata ladınız.fiş tablosuna fişiniz kayıt oldu aramada görüyorsunuz fakat toplu rakamları aldığınız mizanda göremiyorsunuz çünki fiş detay tablosuna fişinizin diğer detay bilgileri kayıt olmadı, bu sayede havada kalan bir fişiniz oldu :) silme işlemi dahi bu gibi durumlarda risk ve sıkıntı oluşturabilir.Bu konu bankacılık sektörü içe de aynı şekilde örneklenebilir. Bizim burda yapmak istediğiniz, işlemi gerçekleştirme esnasında bir hata meydana gelir ise, işlemler tamamen başa sarılsın ve hiçbişey olmamış gibi davranılsın, kıssadan hisse kod içerisinde örnek gösterecek olur isek,

// MsSql bağlantı nesnemizi oluşturup "Connection String" imizi içerisine verdik.
SqlConnection cnn= new SqlConnection(ConnectionString);

//MsSql komutumuzu oluşturduk.
SqlCommand cmd = new SqlCommand("SQL' e gönderilecek olan saf sorgu", con);

//Bağlantımızı açtık.
con.Open();

// Transaction nesnemizi oluşturup cnn nesnesi ile ilişkilendiriyoruz ve BeginTransaction metodu ile işlemi başlatıyoruz.
SqlTransaction tran = cnn.BeginTransaction();

// cmd nesnesine yani sorgumuza transaction olarak oluşturduğumuz tran nesnesini gösteriyoruz.
cmd.Transaction = tran;

try
{
   //Sorgu çalıştırılıyor.
   cmd.ExecuteNonQuery();

   // Hata ile karşılaşılmaz ise "Commit" işlemi gerçekleşiyor.
   tran.Commit();
}
catch
{
   // Hata oluşması durumunda "Catch" bloğuna düşüyor, exception handle ediliyor, istenirse bu bölümde ekrana hata mesajı da basılabilinir.İşlemlerimiz "RollBack" yapılıyor yani tekrar geri alınıyor.
   tran.Rollback();
}
finally
{
   cmd.Dispose();
   con.Close();
}