none
c# sql server listeye veri çekme RRS feed

  • Soru

  •  class Ogrenci
        {
            int _urunId;
            string _urunBarkod;
            string _urunAd;
            int _koliAdet;
            int _satisAdet;
            int _urunFiyat;
             
            public int Id
            {
                get
                {
                    return _urunId;
                }
    
                set
                {
                    _urunId = value;
                }
            }
            public string Barkod
            {
                get
                {
                    return _urunBarkod;
                }
    
                set
                {
                    _urunBarkod = value;
                }
            }
            public string Ad
            {
                get
                {
                    return _urunAd;
                }
    
                set
                {
                    _urunAd = value;
                }
            }
    
            public int Koli
            {
                get
                {
                    return _koliAdet;
                }
    
                set
                {
                    _koliAdet = value;
                }
            }
    
            public int Satis
            {
                get
                {
                    return _satisAdet;
                }
    
                set
                {
                    _satisAdet = value;
                }
            }
    
            public int Fiyat
            {
                get
                {
                    return _urunFiyat;
                }
    
                set
                {
                    _urunFiyat = value;
                }
            }
        }
    
    
    
    
    
    class OgrenciProvider
        {
            SqlConnection con;
            SqlCommand cmd;
    
            public OgrenciProvider() //Kurucu metotta bağlantı yolumuzu belirledik.
            {
                con =new SqlConnection("Data Source=DESKTOP-20DEKN3\\SQLEXPRESS;Initial Catalog=stok;Integrated Security=True");
            }
            public List<Ogrenci> OgrenciGetir()
            {
                List<Ogrenci> OgrenciListesi = new List<Ogrenci>();
                string sql = "SELECT * FROM View_1";
                con.Open();
                cmd = new SqlCommand(sql, con);
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Ogrenci ogr = new Ogrenci();
                    ogr.Id = Convert.ToInt32(dr[0]);
                    ogr.Barkod = dr[1].ToString();
                    ogr.Ad = dr[2].ToString();
                    ogr.Koli = Convert.ToInt32(dr[3]);
                    ogr.Satis = Convert.ToInt32(dr[4]);
                    ogr.Fiyat = Convert.ToInt32(dr[5]);
                }
                con.Close();
                return OgrenciListesi;
            }
        }
    
    
    
    
    
        private void Form1_Load(object sender, EventArgs e)
            {
    
                OgrenciProvider op = new OgrenciProvider();
                dataGridView4.DataSource = op.OgrenciGetir();
            }
    hocam ben sorgu oluşturdum bu sorguyu c3 da listeye almak istiyorum daha sonra içerisinde arama yaptırıcam ama veriler ekrana gelmiyor başlıkları geliyor ama bilgileri ekrana gelmiyor nerede hata yapıyor olabilirim .
    19 Ağustos 2018 Pazar 07:20

Yanıtlar

  • class OgrenciProvider
        {
            SqlConnection con;
            SqlCommand cmd;
    
            public OgrenciProvider() //Kurucu metotta bağlantı yolumuzu belirledik.
            {
                con =new SqlConnection("Data Source=DESKTOP-20DEKN3\\SQLEXPRESS;Initial Catalog=stok;Integrated Security=True");
            }
            public List<Ogrenci> OgrenciGetir()
            {
                List<Ogrenci> OgrenciListesi = new List<Ogrenci>();
                string sql = "SELECT * FROM View_1";
                con.Open();
                cmd = new SqlCommand(sql, con);
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Ogrenci ogr = new Ogrenci();
                    ogr.Id = Convert.ToInt32(dr[0]);
                    ogr.Barkod = dr[1].ToString();
                    ogr.Ad = dr[2].ToString();
                    ogr.Koli = Convert.ToInt32(dr[3]);
                    ogr.Satis = Convert.ToInt32(dr[4]);
                    ogr.Fiyat = Convert.ToInt32(dr[5]);
                    //değiştirdiğim yer aşağıda
                    OgrenciListesi.Add(ogr);
                    //değiştirdiğim yer yukarıda
                }
                con.Close();
                return OgrenciListesi;
            }
        }
    

    Hata nesneleri oluşturup listeye eklemiyor olmanda ancak veritipini bildiği için başlıkları çekebiliyor.Ekstra bir hata göremedim basit bir dikkatsizlik diyelim.

    NOT:Listeye veri eklemeye başlamadan önce clear ile temizlemeni öneririm.Yoksa verilerde düzensizlik yaşayabilirsin.(bir veriyi iki kere çekme vb gibi.)

    19 Ağustos 2018 Pazar 07:31
  • hocam tşk ederim tam istediğim gibi oldu da bir sorum daha olucak ben yeni kayıt ekledikten sonra eklediğim kayıt bu listeye nasıl hemen geçicek yada güncellediğim zaman yada sildiğim zaman bide satış yaptığım zaman stoklarda azalmalar olucak o zaman da bu listeyi güncellemem gerekiyor mu ? ve listeyi nasıl güncelleyebilirim her işlemden sonra 

         Senin işin veritabanıyla , ürün eklediğinde veritabanına sildiğinde ise yine veritabanından sileceksin , liste sadece bir aracı kullanıcıya ne zaman son hali göstermek istiyorsan veritabanından veriyi listeye tekrar çekeceksin.Yani bu senin ihtiyacına kafanda kurduğun algoritmaya göre değişir.

    Yukarıdaki dizayndan anladığıma göre  her işlem sonrası ogrencigetiri çağırmalısın ki liste güncel veritabanı halini alabilsin.Ancak bunu yaparken Listenin tanımladığın satırın altına OgrenciListesi.Clear() eklemeni öneririm.

    yani işin özeti : Kayıt ekle diye bir method olacak sonunda öğrenci getiride çağıracaksın ki liste güncel dursun.bunu sil,update vs içinde yapacaksın.

    • Yanıt Olarak İşaretleyen batuhan2335 19 Ağustos 2018 Pazar 08:08
    19 Ağustos 2018 Pazar 08:07

Tüm Yanıtlar

  • class OgrenciProvider
        {
            SqlConnection con;
            SqlCommand cmd;
    
            public OgrenciProvider() //Kurucu metotta bağlantı yolumuzu belirledik.
            {
                con =new SqlConnection("Data Source=DESKTOP-20DEKN3\\SQLEXPRESS;Initial Catalog=stok;Integrated Security=True");
            }
            public List<Ogrenci> OgrenciGetir()
            {
                List<Ogrenci> OgrenciListesi = new List<Ogrenci>();
                string sql = "SELECT * FROM View_1";
                con.Open();
                cmd = new SqlCommand(sql, con);
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    Ogrenci ogr = new Ogrenci();
                    ogr.Id = Convert.ToInt32(dr[0]);
                    ogr.Barkod = dr[1].ToString();
                    ogr.Ad = dr[2].ToString();
                    ogr.Koli = Convert.ToInt32(dr[3]);
                    ogr.Satis = Convert.ToInt32(dr[4]);
                    ogr.Fiyat = Convert.ToInt32(dr[5]);
                    //değiştirdiğim yer aşağıda
                    OgrenciListesi.Add(ogr);
                    //değiştirdiğim yer yukarıda
                }
                con.Close();
                return OgrenciListesi;
            }
        }
    

    Hata nesneleri oluşturup listeye eklemiyor olmanda ancak veritipini bildiği için başlıkları çekebiliyor.Ekstra bir hata göremedim basit bir dikkatsizlik diyelim.

    NOT:Listeye veri eklemeye başlamadan önce clear ile temizlemeni öneririm.Yoksa verilerde düzensizlik yaşayabilirsin.(bir veriyi iki kere çekme vb gibi.)

    19 Ağustos 2018 Pazar 07:31
  • hocam tşk ederim tam istediğim gibi oldu da bir sorum daha olucak ben yeni kayıt ekledikten sonra eklediğim kayıt bu listeye nasıl hemen geçicek yada güncellediğim zaman yada sildiğim zaman bide satış yaptığım zaman stoklarda azalmalar olucak o zaman da bu listeyi güncellemem gerekiyor mu ? ve listeyi nasıl güncelleyebilirim her işlemden sonra 
    19 Ağustos 2018 Pazar 07:55
  • hocam tşk ederim tam istediğim gibi oldu da bir sorum daha olucak ben yeni kayıt ekledikten sonra eklediğim kayıt bu listeye nasıl hemen geçicek yada güncellediğim zaman yada sildiğim zaman bide satış yaptığım zaman stoklarda azalmalar olucak o zaman da bu listeyi güncellemem gerekiyor mu ? ve listeyi nasıl güncelleyebilirim her işlemden sonra 

         Senin işin veritabanıyla , ürün eklediğinde veritabanına sildiğinde ise yine veritabanından sileceksin , liste sadece bir aracı kullanıcıya ne zaman son hali göstermek istiyorsan veritabanından veriyi listeye tekrar çekeceksin.Yani bu senin ihtiyacına kafanda kurduğun algoritmaya göre değişir.

    Yukarıdaki dizayndan anladığıma göre  her işlem sonrası ogrencigetiri çağırmalısın ki liste güncel veritabanı halini alabilsin.Ancak bunu yaparken Listenin tanımladığın satırın altına OgrenciListesi.Clear() eklemeni öneririm.

    yani işin özeti : Kayıt ekle diye bir method olacak sonunda öğrenci getiride çağıracaksın ki liste güncel dursun.bunu sil,update vs içinde yapacaksın.

    • Yanıt Olarak İşaretleyen batuhan2335 19 Ağustos 2018 Pazar 08:08
    19 Ağustos 2018 Pazar 08:07
  • hocam peki bu liste içinde textbox yardımı ile nasıl arama yaptırabilirim normal tablo içinde arama yaptırabiliyorum fakat listeyi bilmediğim için bu yukarıdaki liste içinde nasıl arama yaptırabilirim
    19 Ağustos 2018 Pazar 08:10
  • peki ben datagridin 1. kolonunda bulunan barkod no ya göre aratma yapıcam onu nasıl belirtebilirim kod kısmında bana şöyle bir kod yazabilirmisiiniz 

    if ( burda koşulu olucak neyin içinde ne arayacağına dair )

    içinde de var ise yapılacak işlem bu kısmı ben yazabilirim ben sadece if kısmının koşul bölümünü yazamadım

    19 Ağustos 2018 Pazar 08:36
  • peki ben datagridin 1. kolonunda bulunan barkod no ya göre aratma yapıcam onu nasıl belirtebilirim kod kısmında bana şöyle bir kod yazabilirmisiiniz 

    if ( burda koşulu olucak neyin içinde ne arayacağına dair )

    içinde de var ise yapılacak işlem bu kısmı ben yazabilirim ben sadece if kısmının koşul bölümünü yazamadım

         Atıyorum adam textbox a barkod noyu girdi , butona tıkladı.

         var Urun = UrunListesi.Single(x=>x.BarkodNo==Textbox.Text);

          Var ile tanımlamış olduğum ürünün barkod numarası textbox.text deki numaraya eşittir.

          Bu durumda ben bu ürünün fiyatına Urun.Fiyat ile ulaşabilirim.

         Yani sen linq ile bir sınıfı parametre alan bir listede sınıfın propertyleri üzerinde gezinebiliyorsun.Buda sana bir dinamizm katıyor.

         Eğer bu barkodda birden fazla ürün varsa 

         var UrunListem = Urunlistesi.Where(x=>x.BarkodNo==Textbox.Text); ile bir dizi ürünü çekebilirsin.

         Yani tam sorduğunu anlamadım aslında.Ekstra bir if e neden ihtiyaç duyuyorsun.

         Yukarıda anlattıklarımı yapan bir method yaz ve bir string parametresi var , sonra butonun click olayınca metodu bir string parametresiyle çağır.Olay bundan ibaret.

       

    NOT:Datagriddeki kolonlar oluşturduğun sınıfın propertyleri.
    19 Ağustos 2018 Pazar 09:04
  •  private void textBox3_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                   if( buraya şartı yazıcam )
                   {
                       messagebox.show ("kayıt listede var");
    
                   }
    else
    kayıt listede yok 
                }
            }

    hocam ben o şartı yazıcağım kısmı bulamadım sizin yukarıda yaptıklarınızı pek anlamadım 

    şimdi textbox3 e barkodu okuttum entera bastım bakıcak listede varsa ekrana mesaj yoluucak listede var diye yok ise yok diye mesaj yollucak bunun kodlarını ayarlayabilirmisiniz acaba tarif ediyonuz ama tarif ettiğiniz kodları bilmediğm için pek anlamıyorum 

    19 Ağustos 2018 Pazar 09:13
  •  private void textBox3_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                   if( buraya şartı yazıcam )
                   {
                       messagebox.show ("kayıt listede var");
    
                   }
    else
    kayıt listede yok 
                }
            }

    hocam ben o şartı yazıcağım kısmı bulamadım sizin yukarıda yaptıklarınızı pek anlamadım 

    şimdi textbox3 e barkodu okuttum entera bastım bakıcak listede varsa ekrana mesaj yoluucak listede var diye yok ise yok diye mesaj yollucak bunun kodlarını ayarlayabilirmisiniz acaba tarif ediyonuz ama tarif ettiğiniz kodları bilmediğm için pek anlamıyorum 

    private void textBox3_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if( UrunListesi.FirstOrDefauly(x=>x.BarkodNo==textBox3.Text)!=null ) { messagebox.show ("kayıt listede var"); } else

    { messageBox.Show("kayıt listede yok" );

    } } }


    Sanırım istediğin bu , barkodnosu listede eşelşen il ürünü getirir yahut null döndürür.

    19 Ağustos 2018 Pazar 09:20
  • hocam bu siz UrunListesi.FirstOrDefauly yazmışsınız ya ben o UrunListesi yazan yere yukarıda yazan kodlardan hangisini yazıcam
    19 Ağustos 2018 Pazar 09:25
  • hocam bu siz UrunListesi.FirstOrDefauly yazmışsınız ya ben o UrunListesi yazan yere yukarıda yazan kodlardan hangisini yazıcam

          OgrenciGetir ile liste döndürüyorsun ya onu kullanacaksın.

         
    private void textBox3_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                   List<Ogrenci> UrunListesi = op.OgrenciGetir();
                   if( UrunListesi.FirstOrDefauly(x=>x.BarkodNo==textBox3.Text)!=null )
                   {
                       messagebox.show ("kayıt listede var");
    
                   }
                   else
                    {
                    messageBox.Show("kayıt listede yok" );
                       }
                }
            }
    Sen verilerini hangi listeye çekiyorsan o listede arama yapacaksın.Bu senin tasarımınla alakalı.
    19 Ağustos 2018 Pazar 09:32
  • Error	1	'System.Collections.Generic.List<STOK__TAKİP.Ogrenci>' does not contain a definition for 'FirstOrDefauly' and no extension method 'FirstOrDefauly' accepting a first argument of type 'System.Collections.Generic.List<STOK__TAKİP.Ogrenci>' could be found (are you missing a using directive or an assembly reference?)	C:\Users\BATUHAN\Desktop\STOK  TAKİP - Kopya - Kopya\STOK  TAKİP\Form1.cs	155	33	STOK  TAKİP
    
    hocam bu hatayı veriyor 
    FirstOrDefauly bu yazıda hata veriyor
    19 Ağustos 2018 Pazar 09:36
  • Error	1	'System.Collections.Generic.List<STOK__TAKİP.Ogrenci>' does not contain a definition for 'FirstOrDefauly' and no extension method 'FirstOrDefauly' accepting a first argument of type 'System.Collections.Generic.List<STOK__TAKİP.Ogrenci>' could be found (are you missing a using directive or an assembly reference?)	C:\Users\BATUHAN\Desktop\STOK  TAKİP - Kopya - Kopya\STOK  TAKİP\Form1.cs	155	33	STOK  TAKİP
    hocam bu hatayı veriyor 
    FirstOrDefauly bu yazıda hata veriyor

          :D yanlış yazmışım FirstOrDefault olacak. Defauly değil.

    private void textBox3_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                   List<Ogrenci> UrunListesi = op.OgrenciGetir();
                   if( UrunListesi.FirstOrDefault(x=>x.BarkodNo==textBox3.Text)!=null )
                   {
                       messagebox.show ("kayıt listede var");
    
                   }
                   else
                    {
                    messageBox.Show("kayıt listede yok" );
                       }
                }
            }

    19 Ağustos 2018 Pazar 09:38
  • hocam oldu fakat barkodu okutuyom var diyo siliyom tekrar okutuyom yok diyo ve hep yok diye kalıyo
    19 Ağustos 2018 Pazar 09:42
  • hocam oldu fakat barkodu okutuyom var diyo siliyom tekrar okutuyom yok diyo ve hep yok diye kalıyo

          Basitçe algoritmana bakalım , ben daha önce market otomasyonu yazmadım aşağı yukarı tahmin etsemde ne yapmaya çalıştığına vakıf değilim.

         1-Verileri ekliyorsun veritabanına

         2-OgrenciGetir metodu ile verileri listeye çekiyoruz.

         3-Veritabanı datagridde gösteriliyor.

         4-Sen Bir barkod Sorguluyorsun Urunlistesine OgrenciGetiri atıyoruz yani veritabanımdaki tabloyu.

         5-(yukarıdaki durumda barkodu buldu tamamdır).

          6-Sen veritabanından barkodu siliyorsun.

          7-Sonra tekrar aratıyorsun barkodu ancak veritabanında ne varsa OgrenciGetir onu getiriyor.Sen zaten silmiştin o barkodu yani ortada o barkod numarasında ürün olmadığından ürün bulunamadı diyor.

        Aslında program gayet düzgün çalışıyor.Burada bir problem yok.

    19 Ağustos 2018 Pazar 09:46
  • hocam son kısmı yanlış anlamışsınız barkodu okutuyorum entera basıyorum sisteme var diyor tamam diyince textboxa okuttuğum barkodu siliyo yanii temizliyo textboxı varitabanından kayıt silmiyor yani . textboxı temizledikten sonraa tekrar okutuyorum yok diyor yani ilk açılışta bir sefer sistemde var dediyse ondan sonra sistemde hep yok görünüyor ama aslında o barkod numarası var 
    19 Ağustos 2018 Pazar 09:50
  • hocam son kısmı yanlış anlamışsınız barkodu okutuyorum entera basıyorum sisteme var diyor tamam diyince textboxa okuttuğum barkodu siliyo yanii temizliyo textboxı varitabanından kayıt silmiyor yani . textboxı temizledikten sonraa tekrar okutuyorum yok diyor yani ilk açılışta bir sefer sistemde var dediyse ondan sonra sistemde hep yok görünüyor ama aslında o barkod numarası var 
          
    private void textBox3_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                   List<Ogrenci> UrunListesi = op.OgrenciGetir();
                    
                   foreach(var nesne in UrunListesi)
                   {
                     MessageBox.Show(nesne.BarkodNo.ToString());
                   }
    
    
    
                   if( UrunListesi.FirstOrDefault(x=>x.BarkodNo==textBox3.Text)!=null )
                   {
                       messagebox.show ("kayıt listede var");
    
                   }
                   else
                    {
                    messageBox.Show("kayıt listede yok" );
                       }
                }
            }
     Şeklinde bak bakalım , aradığın barkod numarası listede varmı yokmu.Çünkü listede ne varsa onun üzerinde dönüyoruz.Bir kontrol et bakalım.Yani bir şekilde veritabanından verisiliyor olman lazım yada veritabanını güncellemeden işlemleri liste üzerine yapıyorsun.
    19 Ağustos 2018 Pazar 09:58
  • hocam açık söylemek gerekirse ben kendim hallederim diye size farklı anlattım ama yapamadım şimdi size yapmak istediğim şeyi detaylı anlatayım.

    1) sql serverda oluşturdğum sorguyu c# da listeye aktardım . 

    2) daha sonrasında textboxa barkodu okuttuğum zaman bu liste içinde barkodagöre arama yapacak şayet var ise datagridviewa o satırı ekleyecek ama yok ise sistemde kayıtlı değil dicek 

    hocam ben bu işlemi bide şu yolla yapıyorum ama uzun mu oluyor onu bilmiyorum. Yani kodlar fazla olduğu için kasma olurmu bilmiyorum. 

    şimdi benim kendi yaptığım yöntemde teztboxa okutuyorum datagriwieva arama yapıyor arama yaptıktan sonra nasıl olsa bir tane kayıt çıktığı için enter tuşuna bastığım zamanda alttaki datagridviewa ekliyo ben bu işlemi böyle yapıyordum sizce hangi yoldan yapmalıyım 

    19 Ağustos 2018 Pazar 10:11
  • hocam açık söylemek gerekirse ben kendim hallederim diye size farklı anlattım ama yapamadım şimdi size yapmak istediğim şeyi detaylı anlatayım.

    1) sql serverda oluşturdğum sorguyu c# da listeye aktardım . 

    2) daha sonrasında textboxa barkodu okuttuğum zaman bu liste içinde barkodagöre arama yapacak şayet var ise datagridviewa o satırı ekleyecek ama yok ise sistemde kayıtlı değil dicek 

    hocam ben bu işlemi bide şu yolla yapıyorum ama uzun mu oluyor onu bilmiyorum. Yani kodlar fazla olduğu için kasma olurmu bilmiyorum. 

    şimdi benim kendi yaptığım yöntemde teztboxa okutuyorum datagriwieva arama yapıyor arama yaptıktan sonra nasıl olsa bir tane kayıt çıktığı için enter tuşuna bastığım zamanda alttaki datagridviewa ekliyo ben bu işlemi böyle yapıyordum sizce hangi yoldan yapmalıyım 

          Şöyle , Sen bir datagrid koy forma bunun datasource'una bir liste ata.

          Barkod numarası okunduğunda , ogrenciGetir çalışsın bakalım numara varmı varsa datagride ekleyelim yok ise uyaralım.

        
    private void textBox3_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter)
                {
                   List<Ogrenci> UrunListesi = op.OgrenciGetir();
                    
         var urun = UrunListesi.SingleOrDefault(x=>x.BarkodNo==textBox3.Text);
                   if( urun!=null )
                   {
                     //burada ürünü bulmuş oluyoruz şimdi
                     //datagride ürünü ekleyeceğiz
                     //datagridin datasource'e atadığın listenin
                    // adı Listem olsun.<Ogrenci>tipinde
                     Listem.Add(urun); //
    
    
                   }
                   else
                    {
                    messageBox.Show("kayıt listede yok" );
                       }
                }
            }

    Bu tarz bir mantık senin istediğin , barkodu okut - varmı yokmu bak-varsa ekle-yoksa uyar.

    Çok fazla veri ile uğraşacağını sanmam , gerektiği yerlerde using deyimlerini kullanır bağlantı açıp kapama işini abartmazsan pek birşey olmaz.abartsanda taşıyacaktır.

    Yukarıda listem dediğim şey barkod okunduğunda varsa yazılacak olan datagridin datasource 'une atadığın liste.Dinamik oalrak değişiyormu winformda bilmiyorum bindingsource kullanman gerekebilir.Araştır.

    19 Ağustos 2018 Pazar 10:30