none
Veri tabanından gelen değeri değişkene atmak RRS feed

  • Soru

  • Merhaba,

    Aşağıdaki kodda sqlserverden gelen değeri int bir değişkene atmak istiyorum. Nasıl düzenleyebilirim?

     public static int OdaKonaklayanSayi(int x)
            {
                int konaklayansayi=0;
                SqlCommand komut = new SqlCommand("SELECT COUNT(*) FROM MUSTERI WHERE MUSTERIDURUM=1 AND MUSTERIODAID=" + x, SQLBaglantisi.baglanti);
                if (komut.Connection.State != ConnectionState.Open)
                {
                    komut.Connection.Open();
                }
                SqlDataReader dr = komut.ExecuteReader();
                konaklayansayi = Convert.ToInt32(dr.Read());
                dr.Close();
                return konaklayansayi;
            }

    6 Ağustos 2019 Salı 20:22

Yanıtlar

  •    public static int OdaKonaklayanSayi(int x)
            {
                int sonuc;
                using (SqlConnection con = new SqlConnection(@"!Connectionstring!"))
                {
                    con.Open();
                    using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM MUSTERI WHERE MUSTERIDURUM=1 AND MUSTERIODAID=@para1", con))
                    {
                        cmd.Parameters.Add("@para1", SqlDbType.Int).Value = x;
                        sonuc = Convert.ToInt32(cmd.ExecuteScalar());
                    
                    }
                    con.Close();
                }
                return sonuc;
    
            }
    Şöyle birşey.
    • Yanıt Olarak Öneren CetinBasoz 6 Ağustos 2019 Salı 21:43
    • Yanıt Olarak İşaretleyen Recep Dogan 7 Ağustos 2019 Çarşamba 12:01
    6 Ağustos 2019 Salı 20:56
  • public static int OdaKonaklayanSayi(int x)
    {
        int konaklayansayi=0;
        using(SqlConnection con = new SqlConnection(SQLBaglantisi.baglanti.ConnectionString))
        using(SqlCommand komut = new SqlCommand(@"SELECT COUNT(*) 
         FROM MUSTERI 
         WHERE MUSTERIDURUM=1 AND 
               MUSTERIODAID=@oda", con))
         {
            komut.Parameters.Add("@oda", SqlDbType.Integer).Value = x;
            con.Open();
            konaklayansayi = Convert.ToInt32(komut.ExecuteScalar());
         con.Close();
         }
                return konaklayansayi;
    }

    Not: Sizin kodunuz da cok yakindi. 

    dr.Read();
    konaklayansayi = Convert.ToInt32(dr[0]);

    Ancak, tek bir deger beklenen durumlarda ExecuteScalar daha uygun.

    Not2: Linq kullanıyor olsaydiniz bu kadar koda gerek yoktu:

    var konaklayansayi = db.Musteri
       .Count(m => m.MusteriOdaID == x && m.Durum);



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    6 Ağustos 2019 Salı 20:57

Tüm Yanıtlar

  •    public static int OdaKonaklayanSayi(int x)
            {
                int sonuc;
                using (SqlConnection con = new SqlConnection(@"!Connectionstring!"))
                {
                    con.Open();
                    using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM MUSTERI WHERE MUSTERIDURUM=1 AND MUSTERIODAID=@para1", con))
                    {
                        cmd.Parameters.Add("@para1", SqlDbType.Int).Value = x;
                        sonuc = Convert.ToInt32(cmd.ExecuteScalar());
                    
                    }
                    con.Close();
                }
                return sonuc;
    
            }
    Şöyle birşey.
    • Yanıt Olarak Öneren CetinBasoz 6 Ağustos 2019 Salı 21:43
    • Yanıt Olarak İşaretleyen Recep Dogan 7 Ağustos 2019 Çarşamba 12:01
    6 Ağustos 2019 Salı 20:56
  • public static int OdaKonaklayanSayi(int x)
    {
        int konaklayansayi=0;
        using(SqlConnection con = new SqlConnection(SQLBaglantisi.baglanti.ConnectionString))
        using(SqlCommand komut = new SqlCommand(@"SELECT COUNT(*) 
         FROM MUSTERI 
         WHERE MUSTERIDURUM=1 AND 
               MUSTERIODAID=@oda", con))
         {
            komut.Parameters.Add("@oda", SqlDbType.Integer).Value = x;
            con.Open();
            konaklayansayi = Convert.ToInt32(komut.ExecuteScalar());
         con.Close();
         }
                return konaklayansayi;
    }

    Not: Sizin kodunuz da cok yakindi. 

    dr.Read();
    konaklayansayi = Convert.ToInt32(dr[0]);

    Ancak, tek bir deger beklenen durumlarda ExecuteScalar daha uygun.

    Not2: Linq kullanıyor olsaydiniz bu kadar koda gerek yoktu:

    var konaklayansayi = db.Musteri
       .Count(m => m.MusteriOdaID == x && m.Durum);



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    6 Ağustos 2019 Salı 20:57
  • Aslında Sorunum şu.

    Odada müşteri kaydı yok ise hesap kapatılsın istiyorum. Örneğin 12 numaralı odada 3 kayıt var ama her seferinde sonuç 1 olarak geliyor. Hangi odayı denediysem sonuç hep 1 oluyor. Aynı sorguyu sql serverda çalıştırıyorum sonuç 3 geliyor. Sizin gönderdiğiniz kodla denedim sonuç değişmedi. acaba kodlarımda mı bir sorun var çözemedim. Bakabilirseniz sevinirim.

    Sayfa Kodu

     protected void Button2_Click(object sender, EventArgs e)
        {
             
            if (BLLMusteri.BllOdaKonaklayanSayi(12) == 0)
            {
                BLLOda.HesapKapatBLL(Convert.ToInt32(OdaId.Text), Convert.ToInt32(TxtUcret.Text));
                Response.Redirect("default.aspx");
            }
            else
            {
                Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Başarısız", "<script>alert('Hesap Kapatılamadı');</script>");
            }
        }

    BllOdaKonaklayanSayı

     public static int BllOdaKonaklayanSayi(int deger)
            {
                return FacadeMusteri.OdaKonaklayanSayi(deger);
            }

    Facede Katmanı OdaKonaklayanSayı

    public static int OdaKonaklayanSayi(int x)
            {
                int konaklayansayi = 0;
                using (SqlConnection con = new SqlConnection(SQLBaglantisi.baglanti.ConnectionString))
                using (SqlCommand komut = new SqlCommand(@"SELECT COUNT(*) FROM MUSTERI WHERE MUSTERIDURUM=1 AND MUSTERIODAID=@oda", con))
                {
                    komut.Parameters.Add("@oda", SqlDbType.Int).Value = x;
                    con.Open();
                    konaklayansayi = Convert.ToInt32(komut.ExecuteScalar());
                    con.Close();
                }
                return konaklayansayi;
            }


    6 Ağustos 2019 Salı 21:18
  • belki de ayni database'e bakmiyorsunuzdur. Calistirmadan once SQL profiler'i calistirip gelen sorguyu inceleyebilir, aynen SSMS'de deneyebilirsiniz.

    isterseniz bir anydesk id verin beraber bakalım.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    • Düzenleyen CetinBasoz 6 Ağustos 2019 Salı 21:51
    6 Ağustos 2019 Salı 21:50
  • Teşekkür Ederim 
    7 Ağustos 2019 Çarşamba 12:00
  • Teşekkür Ederim 
    Halloldu mu?


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    7 Ağustos 2019 Çarşamba 13:54
  • Evet halloldu şöylek; Dediğiniz gibi SQL profiler'i çalıştırdım. Benim projede ilk yazdığım sorguyu değiştirmeme rağmen sql profillerde eski sorgu çağırdığını tespit ettim. halbuku projeyi defalarca kaydettim kapatıp açtım ama duzelmemişti.  projeyi derleyince düzeldi.
    • Düzenleyen Recep Dogan 12 Ağustos 2019 Pazartesi 20:50
    12 Ağustos 2019 Pazartesi 20:50