Merhaba Arkadaşlar,Bu makalemde sizlere Linq Üstünde Stored Procedure kullanımı Anlatacağım.
Öncellikle Linq da Bir DataContext Oluşturulduğunu ve oluşturulan bu contextin içine veritabanımızdaki tablolarımızın süreklenip bırakıldığını söylemiştim(Bkn Linq Giriş-1 Makalesine).
1-)Öncelikle DataContextimizi oluşturuyoruz.Daha Sonra Veritabanında oluşturduğumuz Stored Proceduremüzü sürükleyip contextimizin içine bıraktığımız zaman (aşağıdaki şekilde altı kırmızı ile çizili) stored proceduremüz bir DataFunction olarak sistemimize eklenecektir.
Örnek olarak SQL Server da SP_KisiEkle isimli bir stored procedure oluşturulalım.Ve oluşturduğumuz bu procedurü contextimizin içine sürükleyelim.
Kod:
Create PROCEDURE [dbo].[SP_KisiEkle]
(
@Ad nvarchar(50),
@Soyad nvarchar(50),
@Cinsiyet bit,
@DogumTarih nvarchar(11)
)
AS
Begin
Insert Into Kisi(Ad,Soyad,Cinsiyet,DogumTarih) VALUES (@Ad,@Soyad,@Cinsiyet,@DogumTarih)
End
2-)Daha Sonra Formumuzda bir Kişi Ekleme Buttonunun Click Eventine aşağıdaki kodu yazalım.Nasıl bir contextte ctx.TabloAdı diyip işlem yapabiliyorsak benzer şekilde burada ctx.StoredProcedureAdı verip işlem yapabiliyoruz.
Kod:
DataClassesDataContext ctx = new DataClassesDataContext();
ctx.SP_KisiEkle(txtAd.Text,txtSoyad.Text,Convert.ToBoolean(txtCinsiyet.Text), txtDogumTarih.Text);
ctx.SubmitChanges();
3-) 2 nolu şıkta kullandığımız örnekteki stored procedure içine sadece in parametrelerini alıyordu.Peki biz output parametresinide kullanmak istersek,örnek olarak biz yaşı girdiğimiz zaman çıkış olarak bize o yaşın altındaki kişilerin maaş toplamlarını getiren bir procedure oluşturalım ve bunu da contextimize sürükleyelim.
Kod:
Create PROCEDURE [dbo].[SP_YasaGoreMaasToplam]
(
@Yas int,
@Toplam money OUTPUT
)
AS
Select @Toplam=Sum(Maas) From CalisanDetay where Yas<@Yas
return @Toplam
Proceduremüzü oluşturduktan sonra kod tarafında ise bir butonun click eventine aşağıdaki kodumuzu yazalım burada dikkat edilmesi gereken hususlar output parametresini stored procedure yazarken ref anahtar kelimesini kullandık.
Ayrıca decimal? para=0; şeklinde soru işareti ile tanımlama yaptık.Buradaki soru işaretinin anlamı biz onu veritabanında boş olabilecek şekilde tanımlamış olduğumuzu belirtmektedir.Yani veritabanında nullable kolonlar için soru işaretli tanımlama yapmamız gerekmektedir.
Kod:
protected void btnHesapla_Click(object sender, EventArgs e)
{
int? yas=Convert.ToInt32(txtYas.Text);
decimal? para=0;
DataClassesDataContext ctx = new DataClassesDataContext();
lblTotal.Text= ctx.SP_YasaGoreMaasToplam(yas,ref para).ToString();
}
4-)Son olarak da eğer Stored Procedurümüzden bir liste dönecekse,Örnek olarak procedurümüz ile KisiTablomuzdaki tüm kayıtları çekelim.
Kod:
Create PROCEDURE SP_KisileriGetir
AS
BEGIN
Select * From Kisi
END
Kod Tarafında ise Stored proceduremüzden gelen kayıtları bir listboxa yazdıralım.(Kayıtların sadece isim kısımlarını aldım).
Kod:
protected void btnKisiGoster_Click(object sender, EventArgs e)
{
DataClassesDataContext ctx = new DataClassesDataContext();
List<SP_KisileriGetirResult> k =ctx.SP_KisileriGetir().ToList();
foreach (var i in k)
{
lstKisiler.Items.Add(i.Ad.ToString());
}
}
Düzenle Moderatör Tarafından 26 Şubat 2015 Perşembe 10:30:56(UTC)
| Sebep: Sebep Bildirilmesi