Bu yazımda uzun süredir hayatımızda olan fakat yaygın olarak kullanılmayan Transaction kavramına değineceğim.
Transaction yani “işlem” kavramı veritabanı işlemlerinde çok önemli bir rol oynamakta.
Veritabanı ile işlem yaparken olabilecek herhangi bir hatada işlemlerimiz yarım kalabilir ve kötü sonuçlar doğurabilir. Transaction ile işlem sırasında olabilecek herhangi bir hata sırasında yapılan tüm işlemleri geri sardırabiliyoruz. (Rollback)
Bir örnek vermek gerekirse;
Online bankacılık ile başka bir hesaba havale yapacağımızı düşünelim. Siteye girdik ve havale yap dediğimizde hata aldık. Para bizden düşmüş fakat karşı tarafa eklenmemiş. Eğerki transaction kullanılsaydı hatadan sonra tüm yapılan işlemler geri alınıp, hiç işlem yapılmamış gibi olacaktı.
Yorum satırlarıyla kodumuzu yazalım. Northwind örnek veritabanı üstünden gidelim.
// SQL bağlantımızı ve sorgumuzu yazıyoruz. SqlConnection con = new SqlConnection(ConnectionString); SqlCommand cmd = new SqlCommand("UPDATE Employees SET LastName='RENDE', FirstName='Ahmet' WHERE EmployeeID=5", con); con.Open(); // Transaction nesnemizi oluşturup con nesnesi ile ilişkilendiriyoruz. Ve BeginTransaction metodu ile işlemi başlatıyoruz. SqlTransaction tran = con.BeginTransaction(); // cmd nesnesine yani sorgumuza transaction olarak oluşturduğumuz tran nesnesini gösteriyoruz. cmd.Transaction = tran; try { cmd.ExecuteNonQuery(); // Sorgu başarılı bir şekilde çalıştığında işlemi onaylamak için. Commit metodunu çalıştırıyoruz. Ve veritabanında işlemi gerçekleştirmiş olduk. tran.Commit(); } catch { // Uygulama sırasında bir hatada catche bloğuna düşeceğinden burada Rollback metodu ile işlemin geri sarılmasını sağlıyoruz. tran.Rollback(); } finally { cmd.Dispose(); con.Close(); }
Böylece işlemlerimiz sırasında oluşablecek bir hatada verilerimiz işleme başlamadan önceki halini almış olacak.
Kolay gelsin.