Veritabanımızda sık sık sp’leri kullanırız. Bir çok işlemi sp üzerinde yapabilmekteyiz. Örnek verecek olursak; ürün giriş veya üye kayıt kısmında; masaüstü veya web sitemiz dolayısı ile parametre gönderip işlemi Stored procedure ile bitiriyoruz.
Sp’deki output ile veri tabanından parametre alabiliyoruz. Şöyle ki; e-posta adreslerini tutan veritabanımız ve C# da yazılmış masaüstü uygulamamız olsun. Form yardımı ile girilen e-posta adresini veritabanından kontrol edip, mail adresi varsa kullanıcıya kayıtlı olduğunu belirtip, yoksa kayıt ettirebiliriz. Benzer şekilde Stored procedure output ile arama yaptırabiliriz. Burada yapılan olay parametrenin databasee gidip tekrar geri dönmesinden ibarettir.
Başlıkta belirttiğim üzere mail kontrolü yapan Stored procedure‘li masaüstü uygulaması yapalım;
Resimdeki gibi form ekranı oluşturduktan sonra kod kısmına geçmeden veritabanımıza output parametreli Stored procedure yazalım;
[cc lang=”sql”]create proc sp_coder_output (@dmail nvarchar(50), @var int output)
as
begin
if exists (select mail from tblmail where mail=@dmail)
begin
select @var=1
end
else
begin
insert into tblmail (mail) values (@dmail)
end
end[/cc]
Burada @dmail ve output parametreli tabloda olmayan @var isimli int tipli değişken tanımladık. İf ile kontrol edip, eğer mail adresi daha önceden eklenmiş ise @var değişkenine 1 atamakta, yoksa kayıt etmekte (Database adı: coder, tablo adı: tblmail, kolon adı: mail, tabloda id ve mail kolonları bulunmakta). Sql ile işimi bitirip formda kaldığımız yerden devam edelim.
Butonu çift tıklayıp kod tarafına geliyoruz.
[cc lang=”c#”]
string varmi;
SqlConnection sql = new SqlConnection(“server=.; database=coder; trusted_connection=true;”);
SqlCommand cmd = new SqlCommand();
cmd.Connection = sql;
cmd.CommandText = “sp_coder_output”;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(“@dmail”, SqlDbType.NVarChar, 50);
cmd.Parameters.Add(“@var”, SqlDbType.Int);
cmd.Parameters[“@dmail”].Value = textBox1.Text;
cmd.Parameters[“@var”].Direction = ParameterDirection.Output;
sql.Open();
cmd.ExecuteNonQuery();
varmi = cmd.Parameters[“@var”].Value.ToString();
if (varmi == “1”)
{
MessageBox.Show(“Daha önce eklenmiş mail adresi…”);
}
else
{
MessageBox.Show(“Mail adresi kayıt edildi…”);
}
sql.Close();
[/cc]
SqlConnection yardımı ile veri tabanına bağlandık. SqlCommand ile Procedure’ü çalıştırdık. Değişkenleri kolonlar ve tiplerine uygun olarak ekledik. ParameterDirection.Output ile parametrenin geri gelmesini sağlıyoruz. Burada gelen parametreyi Label1’e yazdırıyoruz. Değeri 1 olursa daha önceden eklenmiştir mesajı alınacak, eğer label1’in değeri 1 olmaz ise kayıt edip, edildi mesajı verecek.