Bu yazımızda veritabanımızda işlem yapmamız için kullanılan diğer bir yöntem olan Stored Procedure işlemine bakacağız.Örneğimizde kayıt okuma işlemini Sql Server'da belirlediğimiz procedure doğrultusunda işlem yapacağız.Öncelikle Stored Procedure ile ilgili eksikleriniz var ise daha önce yazmış olduğum bu makaleyi inceleyebilirsiniz.SP kullanabilmemiz için programlama tarafına geçmeden SQL Server'da oluşturmamız gerekiyor.Bizim yazdığımız örnek SP AdventureWorksDW veritabanında ki Dimproduct tablosundan ilk 10 kayıtı getirip sadece ProductKey ve EnglishProductName kolonlarını gösterecek.SP'miz ;
Create Proc Ilk10Kayit
As
Begin
select top 10 ProductKey,EnglishProductName from Dimproduct
End
Burada adı Ilk10Kayit olan ve belirtilen tablodan ilk 10 kayıtı getiren SP'mizi yazmış bulunuyoruz.Yazdığımız SP'ler veritabanımızın Programmability'nin altındaki Stored Procedures'in altında listelenmektedir.Bulunduğu yere aşağıdan bakabilirsiniz.
Programın çalışır hali aşağıdaki gibidir.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace StoredProcedureKullanimi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnKayitGetir_Click(object sender, EventArgs e)
{
//standart olarak connection nesnemizi tanımlayıp bağlanacağımız veritabanını belirtiyoruz.
SqlConnection con = new SqlConnection("database=AdventureWorksDW ; integrated security=true");
//SqlCommand nesnemize ise sorgumuzu değilde SQL Server'da oluşturmuş olduğumuz Stored Procedure adını belirtip sonra connection nesnemizi veriyoruz.
SqlCommand cmd = new SqlCommand("Ilk10Kayit", con);
//Sorgu türümüz Stored Procedure olduğundan bunu command nesnemize belirtmemiz gerekiyor.Bunu ise command nesnemizin CommandType propertysinde belirtmeliyiz.Bu propertyi ye CommandType enumından Stored Procedure'u seçerek artık bu command'ımızın bir stored procedure olduğunu belirtiyoruz.
cmd.CommandType = CommandType.StoredProcedure;
//daha sonra normal bir şekilde bağlantımızı açıp SqlDataReader nesnesi ile command nesnemizin ExecuteReader() metodunu kullanarak bilgileri okuyup listBox'ımıza yazdırıyoruz veritabanımızdaki bilgileri stored procedure doğrultusunda
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lstKayitlar.Items.Add(dr[0].ToString() + " - " + dr[1].ToString());
}
dr.Close();
con.Close();
}
}
}
Bu şekilde iş mantığımıza uyan tüm veritabanı işlemlerini SQL tarafında Stored Procedure haline getirirsek programlama tarafına geçtiğimizde hiç sorgularla uğraşmayıp sadece oluşturmuş olduğumuz SP'leri çağırmak bize kolaylık sağlayacaktır.
Stored Procedure örneğini indirmek için
Faydalı olması dileğiyle iyi çalışmalar :)
Serhat TAŞ