C# MSSQL Saklı Prosedürler (Stored Procedures)

C# MSSQL Saklı Prosedürler (Stored Procedures)
16 Şubat 2015SQL

Merhaba, bu yazımda mssql ile saklı prosedür yapımını göstereceğim. İlk olarak saklı prosedürlerden bahsetmek istiyorum. Saklı prosedürler tıpkı programlama dillerindeki fonksiyonlar gibi dışarıdan değer alabilen ve ilgili kod bloğunda birden fazla işlemi yapabilen sistemlerdir. 
Saklı prosedürlere geçmeden saklı prosedürlerin de tıpkı tetikleyiciler (trigger) gibi sistemin performansını arttırmaya katkı sağlayan yordamlardır. Bu sayede siz birkaç sorguyu kendi bilgisayarınızdan sürekli sorgu göndererek yapmak yerine sadece prosedürünüzün adını ve parametresini göndererek istediğiniz işlemleri yapabilirsiniz. Bu işlemler direkt olarak sunucu tarafında gerçekleşeceğinden sisteminizin performansında bir yavaşlama meydana getirmeyecektir.

MSSQL tarafımızda dilerseniz bir saklı prosedür oluşturarak başlayalım. Aşağıdaki sql kodları ile sistemde adsoyad isimli bir tablo oluşturuyoruz.
 

CREATE TABLE [adsoyad]
(
[id] [int] IDENTITY(1,1) NOT NULL,
[ad] [nvarchar](50) NULL,
[soyad] [nvarchar](50) NULL
)

şimdi bir adsoyad tablomuzdan ad ve soyadı seçen bir sorgu yazalım.
 

SELECT ad,soyad FROM adsoyad

Yaptığımız bu işlemde hiç saklı prosedüre gerek yok değil mi. İşlemi çok hafif derinleştirelim.
 

SELECT ad,soyad FROM adsoyad WHERE id LIKE '%E' ORDER BY AD,SOYAD ASC

İkinci sorgumuz da yazması kolay kabul edilebilir değil mi ? Peki excelden bir veri aldığınızı düşünün. 30000 satır veriniz var. 40 sütunu bir tabloya, 20 sütunu diğer tabloya import etmeniz gerekecek. Aşağıdaki gibi kodlarınız var. 

INSERT INTO a_table (RECORD_ID,PRODUCT_NAME,PRODUCT_DESCRIPTION,PRODUCT_ATTRIBUTES,PRODUCT_UNIT,PRODUCT_CODE,PRODUCT_AMOUNT,.......) VALUES (,.......)
INSERT INTO b_table (CLIENT_ID,CLIENT_NAME,CLIENT_SURNAME,CLIENT_ADDRESS.......) VALUES (,.......)

30000 kere bu iki sorgunun çalıştığını hayal edin. Sistemin sürekli veritabanına sorgu gönderdiğini düşünün. Bunu masaüstü bilgisayarınızdaki uygulamanız ile yapıyorsunuz . Sistem ne kadar hızlı çalışır ? Bir de bunların server bilgisayarda direkt MSSQL veritabanınızda çalıştırıldığını düşünün. Arada inanılmaz farklar var. Şimdi biz basit birkaç örnekle saklı prosedürleri anlatalım. Önce adsoyad tablosuna bir satır ekleyelim.
 

CREATE PROCEDURE [spAdSoyadKaydet]
(
@ad nvarchar(200),
@soyad nvarchar(200)
)
AS
BEGIN
INSERT INTO adsoyad (ad,soyad) VALUES (@ad,@soyad)
END

Burada ne yaptık ad ve soyad isimli iki parametre tanımlayıp bunları veritabanına ekleyen kodları yazdık. Peki bu parametreleri nasıl mı kullanacağız ? Cevabı bir alt satırda.

spAdSoyadKaydet 'Ender','Ariç'

Yukarıdaki kod sayesinde gönderdiğimiz parametreleri sql içerisine kolayca kaydettik. En basitinden bize birkaç kelime eksik yazmamızı sağladı. Bunun onlarca sütunluk sorgularda işimizi nasıl kolaylaştırabileceğini düşünün. 

Programlama Dillerindeki method mantığı ile buraya istediğiniz kadar parametre gönderip BEGIN ve END blokları arasına istediğiniz sorguları yazabiliyorsunuz. Tüm bu işlemleri sizin istemci bilgisayarınız değil server halledeceğinden size hız sayesinde zaman kazandıracaktır. Son olarak dilerseniz bu saklı prosedürlere C# üzerinden nasıl veri gönderebiliriz onu göstereyim. 
 

SqlCommand kmt=new SqlCommand("spAdSoyadKaydet",baglanti);
kmt.CommandType = CommandType.StoredProcedure;
kmt.Parameters.Add(new SqlParameter(@ad, textBox1.Text));
kmt.Parameters.Add(new SqlParameter(@soyad,textBox2.Text));
int sonuc=kmt.ExecuteNonQuery();

Gördüğünüz gibi öyle uzun uzun sql sorguları yazmadan tek bir kelime ile bağlanıp eklediğim parametreler ile işimi halledebildim. Saklı prosedürler sayesinde hem daha az kod yazmamız sağlanıyor hem de çoğu işlemi sistem tarafına bıraktığımız için daha hızlı hareket edilmesi sağlanıyor.

2936 Görüntülenme sayısı

BİR YORUM YAZIN

Bilgileriniz Güvende!E-Posta adresiniz ve diğer bilgileriniz kimseyle paylaşılmayacaktır.