Stored Procedures (Saklı Yordam) veritabanı üzerinde saklanan SQL (Structed Query Language - Yapısal Sorgulama Dili) cümlecikleridir. Veritabanında tanımlanmış olan bir işin bir tabloya bağlı olmadan yapılmasını sağlayan kodlardır. Parametreler alıp sonuç döndürebilirler. Saklı yordamlar birer veritabanı nesnesi olduklarından dolayı SQL sunucusunda doğrudan yer alırlar ve veritabanın taşınması halinde birlikte hareket ederler. Sadece ilk çalışmada derlenmeleri yeterlidir, daha sonra derlenmeye ihtiyaç duymazlar. Bu nedenle hızlı çalışırlar.
Örnek Çalışma
ASP.NET kullanılarak saklı yordam üzerinden kullanıcı ekleyen bir uygulama şu şekilde yapılmıştır:
Öncelikle Microsoft SQL Server Management Studio 2008'de bir tablo oluşturmak gerekmektedir. id, isim, giris_yili kolonlarından oluşan Ogrenci isimli bir tablo oluşturulur.
"Ogrenci" tablosunun oluşturulmasında kullanılan komut şu şekildedir:
create table Ogrenci
id int identity(1,1),
isim nvarchar(50) not null,
giris_yili int not null,
primary key(id)
Ogrenci isimli tablo üzerinden kullanıcı ekleyen "ekle_ogrenci" isimli saklı yordam ile @isim, @giris_yili parametreleriyle ekleme yapılırken, @id prametresiyle de kullanıcıya "id" döndürülür. Bu saklı yordam için yapılacak sorgu aşağıdaki gibi yazılır:
create procedure [dbo].[ekle_ogrenci]
@isim nvarchar(50),
@giris_yili int,
@id int output
as
insert into Ogrenci(isim, giris_yili)
values(@isim, @giris_yili)
select @id = k.id from Kullanici as i
where @isim = k.isim
Microsoft Visual Studio 2010 açılarak File (Dosya) -> New (Yeni) -> Web Site (Web Sitesi) yoluyla "ASP.NET Empty Web Site" eklenir. Web Site (Web Sitesi) -> Add New Item (Yeni öğre ekle) -> SQL Server Database (SQL Sunucusu Veritabanı) yoluyla da Microsoft SQL Server Management Studio 2008 veritabanına bağlanılır. Böylece veritabanında oluşturulan "Ogrenci" tablosu ve "ekle_ogrenci" isimli saklı yordam bilgilerine ulaşılmış olunur.
Default.aspx kısmında oluşturulmak istenen sayfa görüntüsünün, isim ve giriş yılı için ekleme yapacak metinlerin kodları şu şekilde olmalıdır:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td><asp:Label ID="Lbİsim" runat="server" Text="İsim:"></asp:Label></td>
<td><asp:TextBox ID="tbİsim" runat="server" MaxLenght="50"></asp:TextBox></td>
<td> </td>
<td><asp:Label ID="LbGiris_Yili" runat="server" Text="Giriş Yılı:"></asp:Label>
<asp:TextBox ID="tbGiris_Yili" runat="server"></asp:TextBox></td>
</tr>
</table>
<asp:Button ID="btnEkle" runat="server" Text="Ekle" OnClick="btnEkle_Click"/>
</div>
</form>
</body>
</html>
Default.aspx.cs kısmında ise bağlanılan veritabanında Stored Procedures kullanılarak kullanıcı eklemeyi sağlayacak olan kodlar şu şekilde yazılmalıdır:
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnEkle_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=.\\;Initial Catalog=bayramay;Integrated Security=True");
SqlCommand command = new SqlCommand("ekle_ogrenci", conn);
command.CommandType = CommandType.StoredProcedure;
SqlParameter para_isim = command.Parameters.Add("@isim", SqlDbType.NVarChar, 50)
para_isim.Value = tbİsim.Text;
SqlParameter para_giris_yili = command.Parameters.Add("@giris_yili", SqlDbType.Int);
para_giris_yili.Value = Convert.ToInt32(tbGiris_Yili.Text);
SqlParameter para_id = command.Parameters.Add("@id", SqlDbType.Int);
para_id.Direction = ParameterDirection.Output;
Console.WriteLine(para_id.Direction);
conn.Open();
command.ExecuteScalar();
}
}
Bu kodların yazımından sonra Visual Studio çalıştırıldığında oluşacak görüntü şu şekildedir:
Böylece, saklı yordam kullanılarak ve "System.Data.SqlClient" isim uzayı altındaki sınıflar yardımı ile parametre aktarımı yapılarak, bu metin kontrollerine eklemek istenilen kullanıcıların bilgileri girildiğinde veritabanına direkt olarak ekleme yapılması sağlanmış olunur. Bunun yanısıra kod tarafında tanımlanan "para_id" değişkeni veri tabanına eklenen satırın "id" numarasına sahip olur. İstendiği takdirde bu sayısal değer kod içinde farklı yerlerde kullanılabilir.