C# ta Stored Procedure Kullanmak

24 Mayıs 2007 – 01:31

Tekrar merhaba.

Önceki makalemde stored procedureler hakkında bir giriş bilgisi
vermiştim ve genel olarak nasıl yazıldığına dair örnekler yapmıştık. Bu
makalede stored procedurelerin c#’ta kullanılması ile ilgili biraz bilgi
vereceğim.

Bildiğiniz gibi normal bir c# uygulaması
yaptığınızda sql’le bağlantı kurmak için bir sqlconnection nesnesi, bir
sqlcommand nesnesi ve duruma göre sqldatareader veya sqldataadapter
nesneleri kullanırız. Bunda da aynı nesneleri kullanacağız. Fakat tek
farklılık sqlcomman nesnesinde olacak.

.


SqlCommand

mycommand= new SqlCommand();

.

mycommand.CommandType
= CommandType.Text             satırını

 

 

mycommand.CommandType
= CommandType.StoredProcedure;  olarak
değiştiriyoruz.

 

Bir de :
mycommand.CommandText = kısmına çift tırnak içinde
storedprocedure’ümüzün adını yazıyoruz.

 

Örneğin:

mycommand.CommandText
= "DENEME_EKLE";

 

Daha sonra da
procedure’ümüzün aldığı nesneleri gönderiyoruz. Şimdi bunu daha
açıklayıcı anlatabilmek için bir örnek yapamk istiyorum.

 

Öncelikle bi
procedure yapalım:

 


CREATE PROCEDURE DENEME_EKLE (@AD NVARCHAR(20),@SOYAD NVARCHAR(20))


AS


INSERT INTO DENEME_TABLO(AD,SOYAD) VALUES(@AD,@SOYAD)


GO

 

Görüldüğü gibi
procedure’ümüz iki tane değer alıyor (ad ve soyad) ve bunları
DENEME_TABLO isimli tablonun AD ve SOYAD sütunlarına ekliyor.

 

Şimdiki aşama
c#’ta bu storedprocer’ü kullanamk için gerekli bağlantıları yapmak. Bu
bağlantıları da bir metot içinde kullanmak istiyorum.

 

 

 


public

void KAYIT(string
ad, string soyad)

    {


SqlConnection

mycon = new
SqlConnection
();

           
SqlCommand mycommand=
new SqlCommand();

           
mycommand.Connection = mycon;

           
mycon.ConnectionString = ………;//
connectionstring buraya yazılmalıdır

           
mycon.Open();

           
mycommand.CommandText = "DENEME_EKLE";

            mycommand.CommandType
= CommandType.StoredProcedure;

           
mycommand.Parameters.Add("@AD",
SqlDbType.NVarChar, 50);

           
mycommand.Parameters["@AD"].Value =
ad;

           
mycommand.Parameters.Add("@SOYAD",
SqlDbType.NVarChar, 50);

            mycommand.Parameters["@SOYAD"].Value
= soyad;

           
mycommand.ExecuteNonQuery();

           
mycon.Close();

    }

 

 

Gördüğünüz gibi KAYIT metodu veritabanındaki
DENEME_EKLE isimli procedure’ü kullanıyor, ad ve soyad isminde iki tane
string parametre alıyor ve geriye değer döndürmüyor.

 

mycommand.Parameters.Add("@AD",
SqlDbType.NVarChar, 50);

mycommand.Parameters["@AD"].Value
= ad;

 

satırları
procedure’ümüzün nesneslerini göndermek için kullanlır.
SqlDbType yazdıktan sonra nokta koyunca
sql’deki parametre tiplerini hepsi görünmektedir(int,datetime gibi).


 


Şimdi burada dikkat etmemiz gereken bir kaç husus var.


 


1-   
storedprocedure’de nesneleri hangi sıraya göre yazdıysak (yani bizim
örnek için önce ad sonra soyad) c#’tan da o sıraya göre tanıtmalıyız.
Yani önce soyad sonra ad parametrelerini gönderemeyiz.


2-   
Veritabanında parametrelerin önüne @ işareti koyduğumuz için c#’ta da  
parametreleri göndermek için  @ işareti kullanmamız gerekir: “@
AD"
gibi


3-   
Parametrelerdeki büyük küçük harf farklılığına dikkat etmeliyiz. Yani
procedure’de @AD olarak tanıttığımız parametreyi c#’ta @ad olarak
gösteremeyiz.

 

 

Şu ana kadarki kısımda veritabanımızda
oluşturduğumuz bir procedure’e nasıl ulaşacağımız gördük. Şimdi eğer bu
procedure değer döndürüyorsa nasıl kullanacağız?

Önceki makalemde stored procedure’lerin nasıl değer döndürdüğünü ve
niçin buna ihtiyaç duyulduğunu anlatmıştım. Şimdi bununla ilgili bir
örnek yapalım:

 

Önce procedure’ümüzü biraz değiştirelim. Aynı ad ve
soyadda başka biri varsa kayıt yapmasın ve geriye 0 değeri döndürsün.
Eğer yoksa kayıt yapsın ve bize 1 değeri döndürsün.

 


CREATE PROCEDURE DENEME_EKLE (@AD NVARCHAR(20),@SOYAD NVARCHAR(20))


AS

Declare @kayitkontrol
int

Declare @SONUC
int

Set @kayitkontrol=select
count(*) from DENEME_TABLO where AD=@AD and SOYAD = @SOYAD

 


if(@kayitkontrol = 0)


begin


INSERT INTO DENEME_TABLO(AD,SOYAD) VALUES(@AD,@SOYAD)


set @SONUC = 1


end

 


else


begin


set @SONUC =0


end

 


return @SONUC


GO

 

 

Sıradaki aşama c#’ta bu procedure’ü kullanmak.
Önceki örnekteki motutu bu procedure’e uygun olarak değiştireceğiz ve
dönüş değerini int olarak belirleyeceğiz

 


public

int KAYIT(string
ad, string soyad)

    {

int sonuc;


SqlConnection

mycon = new
SqlConnection
();

           
SqlCommand mycommand=
new SqlCommand();

           
mycommand.Connection = mycon;

           
mycon.ConnectionString = ………;//
connectionstring buraya yazılmalıdır

            mycon.Open();

           
mycommand.CommandText = "DENEME_EKLE";

           
mycommand.CommandType = CommandType.StoredProcedure;

           
mycommand.Parameters.Add("@AD",
SqlDbType.NVarChar, 50);

           
mycommand.Parameters["@AD"].Value =
ad;

           
mycommand.Parameters.Add("@SOYAD",
SqlDbType.NVarChar, 50);

           
mycommand.Parameters["@SOYAD"].Value =
soyad;

           
mycommand.Parameters.Add("@SONUC",
SqlDbType.Int);

           
mycommand.Parameters["@SONUC"].Direction
= ParameterDirection.ReturnValue;

           
mycommand.ExecuteNonQuery();   

           
sonuc =Convert.ToInt32(mycommand.Parameters["@KONTROL"].Value);

           
mycon.Close();  

           
return sonuc;        

    }

görüldüğü üzere sadece

mycommand.Parameters.Add("@SONUC",
SqlDbType.Int);

           
mycommand.Parameters["@SONUC"].Direction
= ParameterDirection.ReturnValue; ve

sonuc =Convert.ToInt32(mycommand.Parameters["@KONTROL"].Value);

satırlarını
ekledik ve geri dönüş değerini almış olduk.

 

Umarım bu
makale bilgilendirici olmuştur. Her türlü soru ve görüşleriniz için
email adresim



kocakemrah@gmail.com

bir sonraki
makalede görüşmek dileğiyle.

 

Bookmark and Share

Post a Comment

Subscribe without commenting