SQL Server 2005 Stored Procedures oluşturma ve ASP.Net ya da ASP ile kullanma.
Merhaba .
Bu makalede SQL Server 2005 de Stored Procedures kavramına inceliyoruz. Makale içerisinde uzun uzun Stored Procedures yazmak yerine kısaca SP olarak yazacağım.
İlk olarak SP nedir , ne işe yarar ona bir bakalım.
SP (Türkçe : Saklı Yordamlar) database server'da saklanan SQL ifadeleridir ve sadece ilk çalıştırıldıklarında derlenirler dolayısıyla program ve web uygulamalarının performansını artırırlar
Mesela bir seçme işlemi için sql sorgusu yazmak zorundayız (linq vb. bir teknoloji kullanmıyorsak). Sql cümlelerini normal şartlarda asp.net de Code Behind tarafında sqlcommand a parametre olarak yazmamız gerekirdi . Bu şekilde yaptığımız taktirde sql kodu her çalıştırıldığında yeniden derlenir.
Oysa SP kullanmış olsak Sql cümlemizi SQL server içerisinde yazıp sonra SqlCommand nesnesine SP ye verdiğimiz ismi parametre olarak belirtebiliriz . Böyle yaptığımız takdirde hem performans artışı olur hem de bir defa yazdığımız sql kodunu bir daha ihtiyaç duyduğumuzda aynı kodu bidaha yazmak zorunda kalmayız.
Örneğin :
ASP.net ile bir e-ticaret sitesi yazdığımızı farz edelim ve bu site üzerindeki ürünlerin isimlerine göre arama yapmak istiyor olalım
Veritabanı yapımız aşağıdaki gibi olmuş olsun (SQL Server 2005 Express) :
Veri tabanı adı: EticaretDeneme.mdf
Tablo Adımız : Urunler
olsun ve alanlar da aşağıdaki gibi olsun.

Tablomuza birkaç tane de ürün ekleyelim ve tablomuzun görünüm aşağıdaki gibi oldu.

Şimdi kodlara geçelim ;
İlk olarak Default.aspx sayfasının tasarımını aşağıdaki gibi yapalım .

Tasarım tamam olduğuna göre şimdi kodlamaya başlayabiliriz. Visual Studio da Server Exlporer dan EticaretDeneme.Mdf nin yanındaki + işaretine tıklayıp açılan listeden Stored Procedures in üstünde sağ tıklayıp Add New Stored Procedure ye tıklıyoruz. Karşımıza Hazır bir SP şablonu çıkacak biz sıfırdan kendimiz yazacağımız için sayfanın tamamını siliyoruz. SP oluşturmaya başlayalım .
SQL Serverda SP oluşturma deyimi Create Procedure SP_adi ya da kısaca Create Proc SP_adi dir.
bu SP mizin görevi sitemizdeki textbox ın içindeki değeri veritabanında aramak olduğundan parametre olarak string tipinde bir değer alacaktır . Almış olduğu bu değere göre geri bir result set dönürecektir. SP lerde parametreler @parametre_adı veritipi şeklinde yazılırlar. Şimdi SP mizi yazalım .
KOD
Create Procedure veri_getir -- SP yi tanımladık ve isim olarak veri_getir yazdık
@aranan_kelime nvarchar(200) -- parametremize isteğimiz ismi verdik ve veri tipini belirttik burada önemli olan nokta
-- parammetre ile bu parametrenin aram yapacağı tablodaki alan adının veir türünin aynı olması ve uzunluğunun alan uzunluğundan fazla olmaması
AS -- as diyerek sql cümlemize geçiyoruz
Select * from Urunler Where UrunAdi like '%'+ @aranan_kelime + '%'
Şimdi de bu SP yi sitemizden çağırıp verileri sayfada gösterelim.
Default.aspx.cs
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class _Default : System.Web.UI.Page
{
Fonksiyon fonk=new Fonksiyon();
protected void Page_Load(object sender, EventArgs e)
{
lbl_Sonuc.Text = "";
}
protected void btn_Ara_Click(object sender, EventArgs e)
{
SqlConnection cn = fonk.baglan();
SqlCommand cmd = new SqlCommand("veri_getir",cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@aranan_kelime",txtUrunAdi.Text);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lbl_Sonuc.Text += dr["UrunAdi"].ToString() + "<br>";
}
cn.Close();
}
}
Kodları verdiğimize göre açıklayalım. İlk olarak bilinidik işlemleri yaptık veritabanımıza bağlantık bunu herzamanki gibi Class dan yaptık.
Sonra bir tane sqlcommand nesnesi oluşturuk ve bu sqlcommand nesnemizin içine parametre olarak sql cümlemizi yazmak yerie SQL Server da tanımladığımız SP mizin adı olan veri_getir i yazdık.
SqlCommand cmd = new SqlCommand("veri_getir",cn);
Bu işlem sonunda sqlcommand ın içine yazmış olduğumuz veri_getir isminin bir SP adı olduğunu belirtmemiz gerekiyor. Aksi taktirde yorumlayıcımız veri_getir yazısını bir sql cümlesi olarak var sayacaktır ve bize sql cümlesi ile ilgili syntax hatası verecektir .
cmd.CommandType = CommandType.StoredProcedure;
bundan sonraki işlemler zaten klasik sqlcommand ile yapılan klasik işlemler.
Bir sqldatareader tanımlayıp verilerimizi u dataredere aktarıp datareader ile de label e yazdırdık.
SONUÇ

NOT: Bu işlemleri ASP ile yapmak için oluşturduğunuz RecordSeti e sql cümlesi yerine EXEC SP_adi
yazarak kullanılabilir
Örnek :
set rs=Server.CreateObject("adodb.recordset")
rs.open "Exec sp_urun_id_al @urun_id="&ID&"" , bag,1,3
Kolay Gelsin.