Transaction Kavramı

Home  >>  C#  >>  Transaction Kavramı

Transaction Kavramı

12
Mar,2013

0
 C#
Merhaba Arkadaşlar, Transaction kavramı çok katmanlı mimarilerde ve veri tabanı programlacığın da kullanılan çok önemli bir kavramdır. Yapacağınız bütün çok katmanlı uygulamalarda mutlaka kullanmanız gerekecektir. Nasıl çalışır a gelirsek bir süreçteki iş parçacıkları görevlerini kusursuz bir şekilde yerine getirdiğinde süreç sorunsuz bir şekilde tamamlandığında commit dediğimiz olay gerçekleşir ve işlem tamamlanmış olur. Eğer iş parçacıkları görevlerini yerine getirirken herhangi bir sorundan dolayı hata oluşursa bütün yapılan işlemler geriye doğru giderek rollback dediğimiz olay gerçekleşir.   Örnek uygulamamızda daha iyi anlamış olacağız. Farklı şekillerde uygulamızı yapabiliriz ama transaction kavramını daha iyi anlayabilmek için uygulamamızı hem basit seçiyoruz hem de kavramımızın yapısına uygun olarak ilerleyeceğiz. İlk önce ihtiyaçlarımızı basit olarak çıkartarak veritabanımızı oluşturalım. StoreProcedure’lerimiz

Create proc MusteriBorcGuncelle

(

@id int,

@ToplamBorcu money

)

as

update tb_MusteriBilgileri set ToplamBorcu =@ToplamBorcu where Id=@id


Create proc [dbo].[SatisKaydet]

(

@musteriId int,

@satisTutari money,

@urunAdi varchar (50)

)

as

insert into tb_SatilanUrun (MusteriId,Fiyati ,UrunAdi)values (@musteriId ,@satisTutari ,@urunAdi)

Transaction(1) Trasaction_Kavrami2 Adında bir class oluşturuyoruz.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Data.SqlClient;

using System.Data;

namespace Transaction_Kavrami_Bakkal

{

public class Transaction_Kavrami2

{

private string sonuc;

public string Sonuc

{

get

{

return sonuc;

}

}

 

public Transaction_Kavrami2(string UrunAdi,float Fiyati)
{

SqlConnection Baglan_BakkalDefteri = new SqlConnection("initial catalog=BakkalDefteri;Data Source=localhost;user id=sa;password=15651565");

 

//Satis Kaydet

SqlTransaction tr;

Baglan_BakkalDefteri.Open();

tr = Baglan_BakkalDefteri.BeginTransaction();

SqlCommand komut_SatisKaydet = new SqlCommand("SatisKaydet", Baglan_BakkalDefteri);

komut_SatisKaydet.CommandType = CommandType.StoredProcedure;

 

komut_SatisKaydet.Parameters.Add("@musteriId",SqlDbType.Int);

komut_SatisKaydet.Parameters.Add("@satisTutari", SqlDbType.Money);

komut_SatisKaydet.Parameters.Add("@UrunAdi", SqlDbType.VarChar, 50);

 

komut_SatisKaydet.Parameters[0].Value = 1;

komut_SatisKaydet.Parameters[1].Value = Fiyati ;

komut_SatisKaydet.Parameters[2].Value = UrunAdi ;

 

komut_SatisKaydet.Transaction = tr;

 

//MusteriyiBorcunuGuncelle

SqlCommand komut_MusteriBorcGuncelle = new SqlCommand("MusteriBorcGuncelle", Baglan_BakkalDefteri);

komut_MusteriBorcGuncelle.CommandType = CommandType.StoredProcedure;

 

komut_MusteriBorcGuncelle.Parameters.Add("@id", SqlDbType.Int);

komut_MusteriBorcGuncelle.Parameters.Add("@ToplamBorcu", SqlDbType.Money);

 

komut_MusteriBorcGuncelle.Parameters[0].Value = 1;

komut_MusteriBorcGuncelle.Parameters[1].Value = 20 + Fiyati ;

komut_MusteriBorcGuncelle.Transaction = tr;

 

try

{

komut_SatisKaydet.ExecuteNonQuery();

komut_MusteriBorcGuncelle.ExecuteNonQuery();

tr.Commit();

sonuc = "Transaction Başarıyla Tamamlandı.";

}

catch (Exception)

{

 

tr.Rollback();

sonuc = "İşlemler yapılırken hata oluştuğu ve geri yükleme yapıldı.";

}

finally

{

Baglan_BakkalDefteri.Close();

}

}

}

}

  Alttaki resimdeki gibi yeni bir asp.net web formu oluşturuyoruz. Transaction(2)  

protected void btnBorcu_Click(object sender, EventArgs e)

{

Transaction_Kavrami2 tk = new Transaction_Kavrami2(txtUrunAdi .Text ,Convert.ToSingle  (txtBorcu .Text));

lblBilgi.Text = tk.Sonuc;

}

Veritabanımıza daha önce ben bir kayıt oluşturmuştum. Transaction(3)     Transaction(4) Bu kayıt sonrası yaptığımız yeni ürün kaydından sonraki değişikleri daha iyi göreceğiz. Uygulamamızı başlayıp bir ürün girişi yapalım Transaction(5)   Ve şimdide veritabanımıza gidip tablolarımızdaki değişikleri görelim   Transaction(6) Transaction(7) Simdi kayıtlarımızı temizleyip Transaction_Kavrami2 clasımızdaki MusteriBorcGuncelle procedure adımızı MusteriBorc Guncelle yapalım ve uygulamızı çalıştıralım. Transaction1 Transaction2 Transaction(8)     Sağlıcakla Kalın... Software Developer Mustafa Demircioğlu www.mustafademircioglu.net mustafa.demircioglu@outlook.com

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir