Transaction Nedir?
Bu yapıyı kullandığımızda yaptığımız işlem bitene kadar diğer işlemlerin yapılmasını engelleyebiliriz. Transaction:Birden çok işlemin bir arada yapıldığı durumlarda eğer parçayı oluşturan işlemlerden herhangi birinde sorun olursa tüm işlemleri iptal etmeyi sağlar
Örneğin kredi kartı ile alışveriş olayında transaction olayı vardır, siz marketten ürün alırken sizin hesabınızdan para düşülecek marketin hesabına para aktarılacaktır bu işlemde hata olmaması gerekir ve bu işlem transaction blogu sayesinde yapılır. Yani kodlarımız sırayla işler bu esnada bir sorun çıkarsa bütün işlem RollBack sayesinde iptal edilir.
Sql server da bir çok transaction kullanımı vardır. Kullanılan transaction sayısını
@@transcount --Transaction sayısı
Çalışmakta olan bir transaction hakkında bilgi edinebilmek için ise aşagıdaki kodu yazıyoruz;
DBCC Opentran
Çıktısı:
Transaction information for database ‘serdar’
Oldest active transaction:
SPID(server process ID):52
UID(User ID):1
Name:user_transaction
LSN:(23:334:1)
Start Time:Oct 28 2009 20:06:33PM
Transaction işlemi esnasında transaction a parametreler verilir
REAL COMMITTED:Transaction sırasında değişikliğe uğrayan onaylanmamış kayıtların okunmasına izin vermez (bu sayfalara dirty page adı verilir)
REAL UNCOMMITTED:Transaction sırasında değişikliğe uğrayan onaylanmamış kayıtların okunmasına izin verir (bu sayfalara dirty page adı verilir)
REPEATABLE READ:
SERIALIZABLE:Transaction bitene kadar kullanıcıların kayıt güncelleme ve yeni kayıt girmesine izin vremez.
Set Transaction isolation level read committed DBCC UserPoints
Yukarıdaki işlem meydana gelen değişiklikleri gösterir.
Şimdi Transaction ile ilgili bir uygulama yapalım;
Öncelikle bir veritabanı oluşturuyoruz ve 2 adet banka tablosu yapıyoruz birinci bankadaki hesaba 2. bankadan havale yapacağız.Tablo alanlarımız işlem no, hesap no,mevduat 2. bankanında alaları böyle olacak
veritabanımıza biraz kayıt giryoruz hesap numarası ve mevduatları;
Bir store procedure oluşturalım;
CREATE PROCEDURE transfer1
@kaynak int,@hedef int
as
begin tran transfer1
update ziraatbank set mevduat=mevduat-800 where hesapno=@kaynak
update vakıfbank set g_mevduat=g_mevduat-800 where g_hesapno=@hedef
if not exists (select * from vakıfbank where g_hesapno=@hedef)
begin
rollback tran transfer1
raiserror('Transfer Edeceginiz Bankada Böyle Bir hesap Numarası yok',16,1)
end
else
begin
commit tran
return 1
end
Prosedürümüzü kaydedip ve c# da formumuzu oluşturuyoruz ve şu kodları yazıyoruz
private void button1_Click(object sender, EventArgs e)
{
SqlConnection c = new SqlConnection();
c.ConnectionString = "Data Source=SERDAR-PC\\SQLEXPRESS;Initial Catalog=ziraat;Integrated Security=True;Pooling=False";
SqlCommand co = new SqlCommand();
co.Connection = c;
co.CommandType = CommandType.StoredProcedure;
co.CommandText = "transfer1";
co.Parameters.AddWithValue("@kaynak", textBox1.Text);
co.Parameters.AddWithValue("@hedef", textBox2.Text);
c.Open();
try
{
co.ExecuteNonQuery();
MessageBox.Show("transfer tamam");
}
catch (SqlException z)
{
MessageBox.Show(z.Message);
}
finally
{
c.Close();
}
}
Uygulamamızı çalıştırıyoruz ve girmiş olduğumuz hesap numarası diğer bankada mevcutsa havale işlemini yapıyor eğer mevcut değilse işlem sona eriyor;

Tevfik KOC
04 Eylül 2010 at 16:22
raiserror(‘Transfer Edeceginiz Bankada Böyle Bir hesap Numarası yok’,16,1)
dısayı hata mesajı mı fırlatıyo ve sende hata olrusa .net taragından catch blogundakı hata tipi sql se onu yakalayıp gerı doduruyosun yanındakı numaralrda yazı, ulke tıpı sanırım
1.soru
try{}catch{} gibi bi moda sokma sansım yokmu
yoksa mesela
hocam hata sartında sen hesap uzerınden takıp etmıssın olayı eyvallah ama benımı daha farklı fantezılerım var zaten transaction olayına yenı sardım acemı bı yazılımcını maceraları de gıtsın ıste
benım buradaki fantezım su
if den once calıstırdıgım alan bıraz daha farklı olcak mesela 6 adet procedur yada sorgu
buradan aslında 6 tane satır doncek gerceklestırıldı yada gerceklestırılemedı
ben burada eger ıslem sonucu donecek sayı kadar olumlu bı satır donmedı ıse demek ıstıyorum bunu nasıl yaparım
4.procedure sorun cıkardı trasnlade ıcınde
if de de procedurlerın ıslemlerınden dogan sonucları yakalayarak eger olumlu sonuc sayısı 6 dan kucukse
rolback
degılse combit olayı gıbı bı moda sokmak ıstıyorum
cvp lar ıcın sımdıen tesk