Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Linq To Sql – Stored Procedure Çalıştırmak

Linq To Sql de Stored Procedure çalıştırabiliriz.Linq To Sql’de stored procedurlerle çalışmanın ayrı bir zevkide, procedurelerin metod halinde kullanma olanağı vermesidir.Stored Procedure hakkında bilgisi olmayanlar Transact Sql-Stored Procedures(SAKLI YORDAMLAR) başlıklı yazımı inceleyebilirler.

LINQ da stored procedure kullanmak için öncelikle stored proceduremizi veritabanında tanımlamış olmamız gerekiyor.Aşağıdaki stored procedure ü, Northwind veritabanına yazıp,execute ediyorum.Tabi önceki yazılarımda olduğu gibi hala Northwind.dbml dosyası üzerinden çalıştığımı bildirmek isterim.

create proc sp_TumPersonelleriGetir
as
select * from Personeller

Şimdi bu stored procedurü, Visual Studio bölümünde Northwind.dbml dosyası üzerinden veritabanına bağlandıktan sonra görebiliriz.

Gördüğünüz gibi benim yazdığım stored procedure gözükmektedir.
Northwind.dbml dosyasında tabloları sürükle bırak işlemiyle dosyanın sol tarafını kullanıyorduk.Stored procedurleri ise sağ tarafa sürükleyip bırakmalıyız.
Artık bu stored proceduremiz kullanılabilir hale gelmiştir.
Kod kısmına gelerek proceduremizi nasıl kullandığımızı görelim.

---1.Kullanım Tarzı---
            NorthwindDataContext NW = new NorthwindDataContext();
            System.Data.Linq.ISingleResult<sp_TumPersonelleriGetirResult> TumPersoneller = NW.sp_TumPersonelleriGetir();
            string isimler = "";
            foreach (var item in TumPersoneller)
            {
                isimler += item.Adi + Environment.NewLine;
            }
            MessageBox.Show(isimler);

Gördüğünüz gibi NorthwindDataContext tipinden olan NW nesnemiz üzerinden stored procumuza ulaşabiliyoruz.
Stored Procedurumuzu “System.Data.Linq.ISingleResult” tipinden bir referansa bağladım.T = sp_TumPersonelleriGetirResult olmasının sebebide, sp_TumPersonelleriGetir() metodunu yazarken bize çıkan kutucukta ne yazacağımızı söylemesidir.Genellikle metodun(arka planda stored procedur tabi) isminin sonuna Result tagı getirilmiş halidir.
Dikkat ederseniz foreach döngüsünde TumPersoneller içinde dönüyoruz.Her personeli item değişkenine alıyoruz.item.(nokta) dediğimizde personellerin özellikleri karşımıza gelmektedir.

---2.Kullanım Tarzı---
            NorthwindDataContext NW = new NorthwindDataContext();
            var Personeller = NW.sp_TumPersonelleriGetir();
            string isimler = "";
            foreach (var item in Personeller)
            {
                isimler += item.Adi + Environment.NewLine;
            }
            MessageBox.Show(isimler);

Bu kullanım tarzı daha basit olmakla beraber, programatik olarak sadelik katıyor.Onun için bunu tercih etmekte fayda var.Stored proceduremizin metodunu direkt çağırıp gelen sonuç kümesini var tipinden Personeller adındaki değişkene atıyoruz.Bu kadar basit 🙂

Sevgili okur :),
Şimdi aklından geçenleri iki farklı şekilde tahmin edebiliyorum.
Ya diyorsundur ki, yazı burada bitti,
ya da diyorsundur ki, ulan bu herif parametreli stored prosedurleri anlatmadı 🙂
Ben ikinci varsayımım olan sesinizi duyuyorum ve parametreli stored prosedurlerin nasıl kullanıldığını anlatmak istiyorum.

Bir önceki sayfamızda Linq To Sql’de Stored Procedurleri kullanmayı anlatmıştık.Bu sayfadaki işimize tekrar değinirsek, parametreli Stored Procedurleri kullanmayı göstereceğim.
Hiç uzatmadan hemen mevzuya girmek, sizinde vaktinizi almamak istiyorum.
Veritabanımıza(Northwind) parametreli bir stored proc. yazalım.Ve Northwind.dbml dosyasında gerekli yere sürükleyip, metod kıvamına getirelim.

create proc sp_IDyeGoreMusteriGetir
(
	@MusteriID nvarchar(50)
)as
	select * from Musteriler where MusteriID = @MusteriID


Şimdi bu procedure ü kullanalım.

---1. Kullanım Tarzı---
NorthwindDataContext NW = new NorthwindDataContext();
System.Data.Linq.ISingleResult<sp_IDyeGoreMusteriGetirResult> Musteri = NW.sp_IDyeGoreMusteriGetir("BONAP");
foreach (var item in Musteri)
{
MessageBox.Show(item.MusteriAdi + " " + item.MusteriUnvani + " " + item.MusteriID);
}

 

---2. Kullanım Tarzı---
            NorthwindDataContext NW = new NorthwindDataContext();
            var Musteri = NW.sp_IDyeGoreMusteriGetir("BONAP");
            foreach (var item in Musteri)
            {
                MessageBox.Show(item.MusteriID + " " + item.MusteriAdi + " " + item.MusteriUnvani);
            }

Bu farklı iki kullanımı önceki sayfada anlatmıştım.Önceki sayfadaki kullanımlarla buradakiler arasında bir fark yok.Hep aynıdır.Dikkat ederseniz parametreli bir stored proc. yazdıysak veritabanına, LINQ’da da o Stored proceduru kullanıyorsak, otomatik olarak metodun(stored proc) parametrelerinde o değeri istemektedir.Metoda verilen parametre değeri, stored procdaki gerekli yerlere yerleştirelecektir.

Veritabanında yazdığımız procedurenin işlevi ne olursa olsun(select,insert,update,delete) aynı yöntemle çalıştırılmaktadır.Hiç bir değişiklik yoktur.

Artık yazımızın sonuna gelmiş bulunuyoruz.Faydalanmanız dileğiyle.
Sonraki yazılarımda görüşmek üzere.
İyi çalışmalar 🙂

Mobil sürümden çık