CSharp ta Stored Procedure Kullanmak

C# ta Stored Procedure Kullanmak

Tekrar merhaba. Önceki makalemde stored procedureler hakkinda bir giris bilgisi vermistim ve genel olarak nasil yazildigina dair örnekler yapmistik. Bu makalemde stored procedurelerin c#’ta kullanilmasi ile ilgili biraz bilgi verecegim.  Önceki makaleye buradan ulasabilirsiniz.

Bildiginiz gibi normal bir c# uygulamasi yaptiginizda sql’le baglanti kurmak için bir SqlConnection nesnesi, bir SqlCommand nesnesi ve duruma göre SqlDataReader veya AqlDataAdapter nesneleri kullaniriz. Bunda da ayni nesneleri kullanacagiz. Fakat tek farklilik sqlcommand nesnesinde olacak. Daha önceki makalemizde kullandigimiz;

.

SqlCommand mycommand = new SqlCommand();

mycommand.CommandType = CommandType.Text;

satirini  

SqlCommand mycommand = new SqlCommand();

mycommand.CommandType = CommandType.StoredProcedure;

olarak degistiriyoruz.

Bir de; mycommand.CommandText = kismina çift tirnak içinde storedprocedure’ümüzün adini yaziyoruz.  Örnegin:

mycommand.CommandText = "sp_Deneme_Ekle";

Daha sonra da procedure’ümüzün aldigi nesneleri gönderiyoruz. Simdi bunu daha açiklayici anlatabilmek için bir örnek yapmak istiyorum. Öncelikle bir procedure olusturalim:

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

AS

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

GO

Görüldügü gibi procedure’ümüz iki tane deger aliyor (ad ve soyad) ve bunlari DENEME_TABLO isimli tablonun AD ve SOYAD sütunlarina ekliyor. Simdiki asama C#’ta bu storedprocdure’ü kullanmak için gerekli baglantilari yapmak. Bu baglantilari 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 yazilmalidir

    mycon.Open();

    mycommand.CommandText = "sp_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ügünüz gibi KAYIT metodu veritabanindaki sp_Deneme_Ekle isimli procedure’ü kullaniyor, ad ve soyad isminde iki tane string parametre aliyor ve geriye deger döndürmüyor.

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

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

satirlari procedure’ümüze parametre göndermek için kullanilir. SqlDbType yazdiktan sonra nokta koyunca sql’deki parametre tiplerini hepsi görünmektedir(int,datetime gibi). Simdi burada dikkat etmemiz gereken bir kaç husus var.

1.       StoredProcedure’de nesneleri hangi siraya göre yazdiysak (yani bizim örnek için önce ad sonra soyad) C#’tan da o siraya göre tanitmaliyiz. Yani önce soyad sonra ad parametrelerini gönderemeyiz.

2.       Veritabaninda parametrelerin önüne @ isareti koydugumuz için C#’ta da  parametreleri göndermek için  @ isareti kullanmamiz gerekir: “@AD"gibi

3.       Parametrelerdeki büyük küçük harf farkliligina dikkat etmeliyiz. Yani procedure’de @AD olarak tanittigimiz parametreyi C#’ta @ad olarak gösteremeyiz.

 Su ana kadarki kisimda veritabanimizda olusturdugumuz bir procedure’e nasil ulasacagimiz gördük. Simdi eger bu procedure deger döndürüyorsa nasil kullanacagiz? Önceki makalemde stored procedure’lerin nasil deger döndürdügünü ve niçin buna ihtiyaç duyuldugunu anlatmistim. Simdi bununla ilgili bir örnek yapalim:

Önce procedure’ümüzü biraz degistirelim. Ayni ad ve soyadda baska biri varsa kayit yapmasin ve geriye 0 degeri döndürsün. Eger yoksa kayit yapsin ve bize 1 degeri döndürsün.

CREATE PROCEDURE sp_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

Siradaki asama C#’ta bu procedure’ü kullanmak. Önceki örnekteki metotu bu procedure’e uygun olarak degistirecegiz ve dönüs degerini int olarak belirleyecegiz.

 

public int KAYIT(string ad, string soyad)

{

    int sonuc;

    SqlConnection mycon = new SqlConnection();

    SqlCommand mycommand = new SqlCommand();

    mycommand.Connection = mycon;

    mycon.ConnectionString = "";//connectionstring buraya yazilmalidir

    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ügü üzere sadece

.

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

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

ve

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

satirlarini ekledik ve geri dönüs degerini almis olduk.

Umarim bu makale bilgilendirici olmustur. Bir sonraki makalede görüsmek üzere.

16 thoughts on “CSharp ta Stored Procedure Kullanmak

  1. [QUOTE=vedat]arkadaslar sizden bir konuda yardim isteyecem proje ödevim için bir txt dosyasindan sql veri tablosuna veri atmam gerekiyor ama bunu nasil yapacagimi bilmiyorum çok ugrastim yapamiyorum yardim edebilecek olan varmi projeyi c# ta yaziyorum txt dosyasinin içerigi su sekilde küçük bir kismini atiyorum

    67595732836 HARUN                                             TEYANÇ
    14998736600 MEHMET CENGIZ                                     TOHUMCU
    22558654948 MUSTAFA                                           SENLIK

    [/QUOTE]

    bunlari tckimlik , ad ve soyad seklinde bir tabloya atmam gerekiyor  eger bu yapida mümkün olmuyorsa bosluklari silip * isaretide atabilirim çok teseskkür ederim
  2. arkadaslar sizden bir konuda yardim isteyecem proje ödevim için bir txt dosyasindan sql veri tablosuna veri atmam gerekiyor ama bunu nasil yapacagimi bilmiyorum çok ugrastim yapamiyorum yardim edebilecek olan varmi projeyi c# ta yaziyorum txt dosyasinin içerigi su sekilde küçük bir kismini atiyorum

    67595732836 HARUN                                             TEYANÇ
    14998736600 MEHMET CENGIZ                                     TOHUMCU
    22558654948 MUSTAFA                                           SENLIK
  3. 🙂
    valla uzun uzun baktym bir hata bulamamystym. araya i?ler girince sonra tekrar bakyyym dedim ama sen Allahtan farketmi?sin 🙂 yoksa bak dur 🙂

  4. Hatamy buldum. Sorun yanly? stored procedure’u ça?yrmammy? 🙂

    Kod tekrarlanmalaryna dikkat etmek gerekiyor 🙂
  5. Set @kayitkontrol = SELECT count(*) FROM Firmalar WHERE Ad=@FirmaAdi

    yerine

    SELECT @kayitkontrol  = count(1) FROM Firmalar WHERE Ad=@FirmaAdi

    denermisin bir.

  6. o zaman cevaplamanyz için bir soru daha.

    Veritabanynda var olan bir kayytla deneme yapyyorum. Kayyt eklenmemesi gerekmesine ra?men ekleniyor ve geriye eklemedi?ini sanyp 0 dönüyor!!
    Bu nasyl olabilir?
  7. hatayy buldum

    parantez ekleyince düzeldi
    Set @kayitkontrol = (SELECT count(*) FROM Firmalar WHERE Ad=@FirmaAdi)
  8. Selam,

    stored procedure’y çaly?tyrmak istedi?imde incorrect syntax near select hatasy veriyor.
    ?u ?ekilde de?i?tirdim ben kendi kullanymym için:
    CREATE PROCEDURE spFirmaEkle_kontrol (
    — Add the parameters for the stored procedure here
    @FirmaAdi nvarchar(50),
    @Telefon nvarchar(50),
    @Adres nvarchar(50),
    @Yetkili nvarchar(50),
    @Email nvarchar(50),
    @Aciklama nvarchar(50)
    )
    AS
    Declare @kayitkontrol int
    Declare @SONUC int
     
    Set @kayitkontrol = SELECT count(*) FROM Firmalar WHERE Ad=@FirmaAdi
     
    if(@kayitkontrol = 0)
          begin
    INSERT INTO Firmalar(Ad, Telefon, Adres, Yetkili, Email, Aciklama)
    VALUES (@FirmaAdi, @Telefon, @Adres, @Yetkili, @Email, @Aciklama)
                set @SONUC = 1
          end
    else
          begin
                set @SONUC =0
          end
    return @SONUC
    GO
    ben bir türlü hatayy bulamadym! Belki yardymcy olabilirsiniz.
    Te?ekkürler
  9.  Allah razi olsun bilgilendirmlere devam edin boyle lütfen yardimci olun  ögrenme istegi olanlara

  10.  cokk tesekkurler stored proceduru ve calismaasini anlamak icin guzel bi calismaa , ellerinize saglik

  11. Merhaba sanirim 2 yerde geçen
    sonuc = Convert.ToInt32(mycommand.Parameters[“@KONTROL”].Value);

    ifadesindeki “KONTROL” yanlis olmus, “SONUC” olmali.

  12. Çok tesekkür ederim güzel bir anlatim.Açikcasi çok faydalandim ve daha farkli seyler ögrendim,bilgime bilgi katti:)

Guests için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir