BEGİN TRANSACTİON Birden çok sorgu işlemini aynı anda kontrol yapmasını sağlıyor tümü doğru ise başarıyla kaydediyor. Değilse yapılan tüm değişikleri geri alıyor.
Örnek : Günlük sık kullandığımız  e-Posta örnek olarak gösterecem.

E-Postayı yazdık alıcıya gönderdik.

Alıcıya gitti, Alıcının e-postası aktif, e-posta başarıyla gönderildi. 'Commit();'

Akif Değilse e-posta bize geri geldi, e-posta Başarısız gönderilmedi. ' RoolBack ();'

Bir Diğer Örnek : ATM Lerde para cekme, Gonderen ve Alici,

Gonderenin Hesabından para düş ,Alıcıya heabına ekle 'Commit();'

Gonderenin Hesabından para düş,Alıcıya hesabına eklenmedi, tekrardan Gonderenin hesabına ekle 'RoolBack();'
C# Begin Transaction Commit RoolBack

ilk başta tablomuzu oluşturalım.

Veritabaniismi : BEGINTRANS
Tablo : PARAGONDEREN
Tablo: PARAALICI
PARAGONDEREN COLON: ID INT, GONDERENAD NVARCHAR(150), HESAP MONEY;
PARAALICI COLON: ID INT, ALICIAD NVARCHAR(150), HESAP MONEY;
veritabanımızı oluşturuldu sonra gelelim formumuzu tasarlamaya
// formuzu bu şekilde ayarlıyalım. Gelelim kodlamaya

using System.Data.SqlClient;

SqlConnection Con=SqlConnection (@"Server=SebihCicek; DataBase=BEGINTRANS; uid=KullanıcıAd;Password=Sifre");

                                              //Şifresiz
 SqlConnection Con=SqlConnection (@"Server=SebihCicek ;Initial Catalog=BEGINTRANS; integrated security=true");

SqlCommand Gonderen=new SqlCommand("Update PARAGONDEREN SET HESAP=@HESAP WHERE ID=@ID",Con);
Gonderen.Parameters.AddWithValue("@HESAP",TextBox1.Text);
Gonderen.Parameters.AddWithValue("@ID","1");
//Gonderenin ID'si 1 olanda işlem yacapaz 

SqlCommand Alici=new SqlCommand("Update PARAALICI SET HESAP=@HESAP WHERE ID=@ID",Con);
Alici.Parameters.AddWithValue("@HESAP",TextBox2.Text);
Alici.Parameters.AddWithValue("@ID","2");
//Gonderenin ID'si 2 olanda işlem yacapaz 

SqlTransaction SqlTrans=Con.BeginTranscation();
try
{
//EĞER SORGULARIMIZ İKİSİDE DOĞRU İSE SORUNSUZ ÇALIŞTIYSA İŞLEM COMMİTLE ONAYLIYORUZ.
Gonderen.Transaction=SqlTrans;
Gonderen.ExecuteNonQuery();
Alici.Transaction=SqlTrans;
Alici.ExecuteNonQuery();
SqlTrans.Commit();

}
Catch

{
//İŞLEM BAŞARASIZ OLURSA TÜM İŞLEMLERİ GERİ ALIYORUZ. 
SqlTrans.RoolBack();
}

son olarak birden çok transaction kullanıldı diyelim. Açık olan transaction sayısını öğrenmek için

SELECT @@TRANCOUNT 

Yorumlar

Daha yeni Daha eski