none
SQL den koşullu sorgudan dönen bilgileri değişkenlere aktarma. RRS feed

  • Soru

  • Merhabalar Aşağıdaki gibi bir sorgudan dönen  bilgileri bir diziye veya farklı yöntemler ile değişkenlere aktarmak istiyorum ancak başaramadım. Yardımcı olabilirmisiniz.

    SqlConnection con = new SqlConnection(dbtools.connstr);
                    SqlCommand com = new SqlCommand();
                    con.Open();
                    com.Connection = con;
                    com.CommandText = ("select sum(miktar),fistipi  from fisdet where malkodu ='" + textEdit1.Text+ "'and donem = '" + dateEdit2.Text + "' GROUP BY fistipi ");
                    SqlDataReader toplam = com.ExecuteReader();

    SQL de sorgundan aşağıdaki gibi bilgi dönüyor

    No Column Name        Tip

               50                   D

                15                  I

                15                 M

                17                  T


    14 Eylül 2020 Pazartesi 22:14

Yanıtlar

  • Iyi ki basaramayip kodunuzu paylasmissiniz. ASLA ve ASLA bu sekilde "select ...." + textEdit1.Text + "...." seklinde SQL cumlesi yazmayiniz, parametre kullaniniz.

    string sql = @"select sum(miktar) as miktar, fistipi
      from fisdet 
      where malkodu = @malkod and 
            donem   = @donem
      group by fistipi";
    
    DataTable tbl = new DataTable();
    
    using (SqlConnection con = new SqlConnection(dbtools.connstr))
    using (SqlCommand com = new SqlCommand(sql, con))
    {
        com.Parameters.Add("@malkod", SqlDbType.Varchar).Value = textEdit1.Text;
        com.Parameters.Add("@donem", SqlDbType.Varchar).Value = dateEdit2.Text;
        con.Open();
        tbl.Load(com.ExecuteReader());
        con.Close();
    
    }
    
    // dizi neden gerekli bilemiyorum ama madem oyle
    var dizi = tbl.AsEnumerable()
               .Select(x => new {
                    Miktar = x.Field<int>("Miktar"),
                    FisTipi = x.Field<string>("FisTipi")
      }).ToArray();
    Not: dateEdit2 sanki tarih ile ilgili bir sey ama sizin kodunuzda string oldugu icin ben de oyle kullandim. Umarim Date\Datetime gibi bir degeri string gibi kullanmaya calismiyorsunuzdur.



    Blog
    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.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.



    14 Eylül 2020 Pazartesi 22:38
    Yanıtlayıcı

Tüm Yanıtlar

  • Iyi ki basaramayip kodunuzu paylasmissiniz. ASLA ve ASLA bu sekilde "select ...." + textEdit1.Text + "...." seklinde SQL cumlesi yazmayiniz, parametre kullaniniz.

    string sql = @"select sum(miktar) as miktar, fistipi
      from fisdet 
      where malkodu = @malkod and 
            donem   = @donem
      group by fistipi";
    
    DataTable tbl = new DataTable();
    
    using (SqlConnection con = new SqlConnection(dbtools.connstr))
    using (SqlCommand com = new SqlCommand(sql, con))
    {
        com.Parameters.Add("@malkod", SqlDbType.Varchar).Value = textEdit1.Text;
        com.Parameters.Add("@donem", SqlDbType.Varchar).Value = dateEdit2.Text;
        con.Open();
        tbl.Load(com.ExecuteReader());
        con.Close();
    
    }
    
    // dizi neden gerekli bilemiyorum ama madem oyle
    var dizi = tbl.AsEnumerable()
               .Select(x => new {
                    Miktar = x.Field<int>("Miktar"),
                    FisTipi = x.Field<string>("FisTipi")
      }).ToArray();
    Not: dateEdit2 sanki tarih ile ilgili bir sey ama sizin kodunuzda string oldugu icin ben de oyle kullandim. Umarim Date\Datetime gibi bir degeri string gibi kullanmaya calismiyorsunuzdur.



    Blog
    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.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.



    14 Eylül 2020 Pazartesi 22:38
    Yanıtlayıcı
  • Merhabalar,

    Öncelikle yardımlarınız için teşekkür ederim. Parametre tavsiyeniz ve uyarınız için teşekkür ederim. İncelediğim formlarda bu şekilde parametre kullanımları dikkatimi çekti. Elimde olan kod örnekleri bu şekilde idi.  DateEdit nesnesini string olarak kullanmıyorum (Normalde) ancak yapmaya çalıştığım uygulamada belli tarihleri milat olarak alıp milatlar arasında yapılan her işlemin hangi döneminde yapıldığına dair basit bir mantık uyguladım. BU yüzden dateedit nesnesindeki tarihi ay ve yıl olarak formatlayıp veri tabanına string olarak kaydettim. Sorguda bu nedenden dolayı dateedit2.text yazdım.

    Dizi neden gerekli olduğu kısmında ise; kaydettiğim verileri milatlar arasında tiplerine göre gruplayıp, aynı tipteki değerleri toplayarak  diziye aktarmayı daha sonra ise diziden farklı değişkenlere alıp dört işleme tabi tutmayı düşündüm. Çevremde etkileşime geçebileceğim yazılımcı arkadaşım yok. Bu yüzden kurduğum mantık ve tasarladığım kodlar hatalı, hantal vs olabilir kusurumu mazur görünüz.

    Gönderdiğiniz kodu deneyip dönüş yapacağım şimdiden teşekkürler.

    15 Eylül 2020 Salı 11:48
  • Merhabalar Hocam, 

    Düzenlediğiniz kod ve uyarılarınız sayesinde boşu boşuna uğraştığımı anladım. Tabi tam olması gerektiği gibi doğru bir sonuç çıkarttım mı bilmiyorum ama istediğim şeyi daha kolay bir yoldan yapmama vesile oldunuz. Dizi neden gerekli sorusunu neden sorduğunuzu daha iyi anladım sanırım :) verdiğiniz kodlarda atama hatası aldım ama zaten atama yapamama da gerek yok muş :)

    Çok Teşekkürler.

    Bilgi Paylaşıldıkça Çoğalır

    15 Eylül 2020 Salı 22:34
  • Atama hatasi almaman gerekirdi ama data tiplerini ben bilemedigimden tahmin yuruttum (Miktar int, fistipi string diye).



    Blog
    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.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.

    15 Eylül 2020 Salı 23:36
    Yanıtlayıcı