TransactionScope Kullanımı

Eylül 15, 2011

Merhaba arkadaşlar projelerimizde veri tabanı işlemleri yaparken bazen tüm verilerin birbiri ile entegre çalışabilmesi , ileride verilerde uyumsuzluk olmaması için tüm işlemlerin  eksiksiz yapılmasını isteyebiliriz daha da açacak olursak örnegin 4 farklı tabloya veri girişi yapıyorsunuz ve bu veriler hepside birbirleri ile ilişkili başka sorgularınızda bu ilişkilerden yararlanıyorsunuz.Ama 1. ve 2. insert sorguları sorunsuz bir şekilde çalıştıktan sonra 3. insert sorgunuzda herhangi bir sorun çıkarsa ne olacak 2 tabloya veri girişi yapılmış diğer 2 tabloya veri girişi yapılamamış olacak peki bu ne gibi sorunlara yol açabilir : İleride birbiri ile ilişkili olan tablolarda bir sorgu çalıştırdıgınızda hata verebilir yada hiç bir değer dönmeyebilir.Hataları try-cacth yapısı ile kontrol edebilirsiniz ama bu yapı ile hatayı yakalıyor ve yönetiyor bile olsanız yapılmış işlemleri geri alamazsınız.Bu tip çok önemli noktalarda TransactionScope yapısını kullanabilirsiniz.Bu yapıda işlemleri hepsi normal yolunda giderse en sonda veri tabanına aktarılır eğer arada herhangi bir hata ile karşılaşılırsa o ana kadar yapılan her işlem geri alınır bu sayede  veri tabanında veri uyuşmazlıgı yaşanmaz.Şimdi gerekli kodlarımızı yazmadan TransactionScope sınıfını kullanabilmemiz için projemize sag tıklayalım ve Add Reference diyip açılan pencereden .NET tabının altından System.Transactions dll ‘ ini referanslara ekleyelim.

 

 

 

Daha sonra veri tabanımızı hazırlayalım TScope adında veri tabanımızı oluşturalım Kisi tablosu olusturalım tablomuzda 3 tane alan olması lazım bunlar ID,Ad,Soyad alanları ID alanını otomatik artan yapalım örnek olması açısından basit bir yapı oluşturuyoruz.Projemizin using kısmına System.Transactions ekliyoruz.

 

 

Şimdi TransactionScope kullanımını görelim.Projemize sadece bir tane buton koyalım ve kodlarımızı bu buton ‘ un içine yazalım.Kod yapımız şu şekilde olacaktır.

 

 

İlk olarak veri tabanımıza bağlanıyor ve bağlantımızı açıyoruz daha sonra 2 tane insert sorgusu yazıyoruz ama bu sorgulardan biliyoruzki 1. doğru 2. yanlış.Bu yanlışlıgı bilerek yapalımki bu yapının bize ne gibi esneklik getirdiğini çok daha iyi anlayabilelim.Sorgularımızı yazdıktan sonra  ExecuteNonQuery diyerek sorgumuzu çalıştırıyoruz 1. sorgu sorunsuz çalışıyor ama 2. sine gelince fazladan bilgi veri tabanına girmeye çalıştıgımız için sistem hata veriyor ve catch kısmına program düşüyor.Peki şimdi işler nasıl gerçekleşti ? cmd.ExecuteQuery diyince 1. sorgunun sonucunda Ad ve Soyad kısmına 1 kereligine veri girişi olması lazım.İşte tam burada TransactionScope yapısı devreye giriyor ve sistem hata verirse o ana kadar yapılmış gibi görünen tüm işlemleri gerçekleştirmiyor ve veri tabanındaki ileride oluşabilecek uyumsuz verilerden bizi kurtarıyor.Peki bunu nasıl yapıyor : Farkettiyseniz ExecuteNonQuery lerden sonra Complete method ‘ u çagrılıyor bu method ‘ un görevi o ana kadar herhangi bir hata oluşmadıysa yapılması gereken bütün işlemleri yap anlamına gelmektedir eğer arada bir yerde hata meydaha gelirse kod Complete method’una gelemediği için veri tabanına herhangi bir veri girişi olmayacaktır.Hatayıda cacth blogunda yakalıyoruz ve düzgün bir mesaj verdiriyoruz.İyi çalışmalar.

posted in C# by gokhan

Follow comments via the RSS Feed | Yorum yapın | Trackback URL

1 Comment to "TransactionScope Kullanımı"

  1. türkan wrote:

    süper olmuş teşekkürler arkadaşım

Leave Your Comment

*

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org