Tüm gece sıfır uykudan sonra yazılan bir yazıyı okuyorsunuz şuanda , herşeyden önce uyarmak istiyorum sizi .
Sabaha kadar kod yazdıktan sonra birazda düz yazı yazma ihtiyacı hissettiğim için yazmaya başladım bu yazıyı . Store procedure ( Saklı yordam ) nedir , nasıl kullanılır onu özetlemeye çalışacağım.
Saklı yordamlar istemci tarafında değil server tarafında veritabanı tarafından işletilen komutlardır.
Bu nedenle istemci programların hafıza kullanımı ve hızı açısından faydalıdırlar. Şimdi şöyleki , bir web projesi yazıyorsunuz ve kodlarınız çok güvenli olmayan bir hostingte tutulacak , sizden başkalarıda kodlara erişebilme ihtimalleri var. Bu gibi bir durumda güvenlik amacıyla bile kullanabilirsiniz. Tüm veritabanı işlemlerinizi saklı yordamlar yardımıyla yaparak istemci tarafından sadece saklı yordamlara verilen parametrelerle çalıştırmaya yetkili bir kullanıcıyla bağlanıp yaptırırsanız , veritabanı güvenliği açısından gayet faydalı olacaktır.
kodlarınıza erişen birisi bile sadece o saklı yordamları çalıştırabilen bir kullanıcı adına sahip olacaktır.
Şimdi saklı yordamlar nasıl kullanılır ona bir bakalım. Ben örneğini Sqlserver 2005 veritabanında hazırladım.
Yeni bir saklı yordam aşşağıdaki örnek koddaki gibi oluşturulabilir.
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[SP_MUSTERI_SEC] @MAIL nvarchar(50) , @SIFRE NVARCHAR(50) AS BEGIN SET NOCOUNT ON; SELECT *FROM MUSTERI WHERE SIFRE=@SIFRE AND EMAIL_ADRESI=@MAIL END } }
CREATE PROCEDURE den sonra oluşturacağımız saklı yordamın adını belirtiyoruz . Ve hemen aşşağısına
dışarıdan alacağımız yada dışarıya göndereceğimiz parametrelerimizi tanımlıyoruz.
Sonrada sql cümlemizi yazarak veritabanında işlemimizi gerçekleştiriyoruz.
Şimdi de istemci tarafında c# kodlarıya bu saklı yordamdan nasıl veri alacağımıza bir bakalım.
SqlCommand _cmd = new SqlCommand("SP_MUSTERI_SEC", _main.cnn); _cmd.CommandType = CommandType.StoredProcedure; _cmd.Parameters.AddWithValue("@MAIL", txt_email.Text.ToString()); _cmd.Parameters.AddWithValue("@SIFRE", txt_sifre.Text.ToLower().ToString()); if (_main.cnn.State == ConnectionState.Closed) { _main.cnn.Open(); } SqlDataReader _dr = _cmd.ExecuteReader();
Dikkat ettiyseniz “_cmd.CommandType = CommandType.StoredProcedure;” satırında commandımızın tipinin stored procedure olduğunu belirttik ve sonrada verilerimizi sqldatareader a aktardık.