En iyi yanıtlayıcılar
c# sql server listeye veri çekme

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 .
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.)
- Düzenleyen Mehmet Emin Kaymaz 19 Ağustos 2018 Pazar 07:38
- Yanıt Olarak İşaretleyen batuhan2335 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
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.)
- Düzenleyen Mehmet Emin Kaymaz 19 Ağustos 2018 Pazar 07:38
- Yanıt Olarak İşaretleyen batuhan2335 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
-
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
-
-
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
-
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.
- Düzenleyen Mehmet Emin Kaymaz 19 Ağustos 2018 Pazar 09:06
-
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( 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.
- Düzenleyen Mehmet Emin Kaymaz 19 Ağustos 2018 Pazar 09:21
-
-
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ı. -
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ı veriyorFirstOrDefauly bu yazıda hata veriyor
-
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ı veriyorFirstOrDefauly 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" ); } } }
-
-
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.
-
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
-
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. -
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
-
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.