Şimdi Ara

c# sqlden gelen veriyi değişkene atmak

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
12
Cevap
0
Favori
10.792
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • arkadaşlar merhaba işyerinde bir c# proje için ms sql serverda bir sorgu çalıştırıyorum ama her seferinde boş değer geliyor , kırmızı olan yerde takılıyor değer null olamaz diyor , çözemedim bir türlü?
    kod :
    string stokkd = "74745 vr526";

    strbaglanti = "Data Source=******;Initial Catalog=***;User ID=***;Password=******";

    baglanti = new SqlConnection(strbaglanti);
    string sorgu = "SELECT SUM(MIKTAR) FROM ****D0006TBLVERSIPHAREKET WHERE STOKKODU='" + stokkd + "'";

    SqlCommand komut = new SqlCommand(sorgu, baglanti);
    baglanti.Open();

    SqlDataReader okuyucu = komut.ExecuteReader(CommandBehavior.CloseConnection);

    while (okuyucu.Read())
    {
    if (sonuc == null) { sonuc = "0"; }
    else
    {
    sonuc = okuyucu.GetString(0);
    }
    }

    MessageBox.Show(sonuc);
    okuyucu.Close();







  • sum(miktar) olan yeri isnull(sum(miktar),0) olarak değiştir. bunu yaptıktan sonr zaten null olanlar otomatik sıfır gelecektir.

    ayrıca sorgunuda şöyle yapabilirsin

    Dim komut As New SqlCommand("SELECT ISNULL(SUM(miktar),0) FROM xxx where.....", baglanti)
    toplam= Convert.ToDouble(komut.ExecuteScalar)



    < Bu mesaj bu kişi tarafından değiştirildi smur -- 5 Şubat 2014; 15:30:49 >
  • 'System.Decimal' türündeki nesne 'System.String' türüne atılamadı. ayrıca c# kodu diyorum dim ler vb ta kullanılıyor sanırım



    < Bu mesaj bu kişi tarafından değiştirildi donkiman -- 5 Şubat 2014; 15:34:27 >
  • SqlCommand komut = new SqlCommand("SELECT ISNULL(SUM(miktar),0) FROM xxx where.....", baglanti);
    double TOPLAM = Convert.ToDouble(komut.ExecuteScalar);



    < Bu mesaj bu kişi tarafından değiştirildi smur -- 5 Şubat 2014; 15:52:07 >
  • Merhaba,

    Sorununuz veri çekme yönteminizden kaynaklanmakta okuyucu.GetString(); yerine okuyucu[0].ToString() kullanabilirsiniz. Ben böyle yaptığımda hata almadım. Ayrıca sanırım veritabanından sadece bir veri alacaksınız, eğer bir veri alacaksanız while döngüsü kullanmanıza gerek yok. Kodlarla göstermek gerekirse:

    reader.Read();

    if(!string.IsNullOrEmpty(reader[0].ToString())) sonuc = reader[0].ToString(); burda IsNullOrEmpty() methodu şu if kontrolu işe aynı anlama gelmektedir: if(deger == null || deger == "") şeklinde. Eğer parametre olarak girilen değer null ise size True yanıtını verir.
    else sonuc = 0;

    devamında ise bağlantı ve okuyucunuzu kapatabilirsiniz. Birde size tavsiyem sayısal verileri tutmak için string kullanmayın int kullanın ki ram üzerinde gereksiz yer kaplamasın sayısal bir ifade string şeklinde saklanarak.

    Kolay gelsin...
  • arkadaşlar ilginiz için teşekkür ederim . sayın özgür beyin ilk önerdiğiniz şey işe yaradı messagebox a yazdırıyor. sorumu biraz genişletmek istiyorum . benim bir tablom var serverdan belirli bir sql sorgusuyla çektiriyorum ve bir datagridview e yüklüyorum. daha sonra data grid in 1. sütununda yazan stokkodu kısmından birinci satırda olanı stokkd değişkenine atıp sonra yukarıdaki kodlarla bunu yeni sorguda arattırıp toplam mt yi datagridview1 de 12. sütuna yazdırmak istiyorum. Kod şu anda messagebox a yazıyor ama kodla açtığım datagridview1 deki 12. sütuna yazmaya gelince şu hatayı veriyor :

    Dizin aralık dışındaydı. Negatif bir değer olmamalı ve koleksiyonun boyutundan daha küçük olmalıdır.
    Parametre adı: index

    kodumun son hali :

    for (i = 0; i <= dataGridView1.Rows.Count; i++)
    {
    string stokkd = Convert.ToString(dataGridView1.Rows.Cells[1].Value);
    if (stokkd == null) { break; }
    else
    {

    strbaglanti = "Data Source=***;Initial Catalog=***;User ID=***;Password=***";

    baglanti = new SqlConnection(strbaglanti);
    string sorgu = "SELECT ISNULL(SUM(MIKTAR),0) FROM ***D0006TBLVERSIPHAREKET WHERE STOKKODU='" + stokkd + "'";

    SqlCommand komut = new SqlCommand(sorgu, baglanti);
    baglanti.Open();

    SqlDataReader okuyucu = komut.ExecuteReader(CommandBehavior.CloseConnection);

    while (okuyucu.Read())
    {

    sonuc = okuyucu[0].ToString();

    }

    dataGridView1.Rows.Cells[12].Value = sonuc;
    okuyucu.Close();
    }}




  • neyse sorunu çözdüm artık istediğim sütuna yazdırabiliyorum fakat int e çeviremiyorum string geliyor. sonuc değişkenini string olarak tanımlamıştım formun en üstünde ondan kaynaklanıyor sanki ama onu int tanımlayıncada olmuyor .ToString() komutunu silincede olmuyor burda takıldım.
  • quote:

    Orijinalden alıntı: donkiman

    neyse sorunu çözdüm artık istediğim sütuna yazdırabiliyorum fakat int e çeviremiyorum string geliyor. sonuc değişkenini string olarak tanımlamıştım formun en üstünde ondan kaynaklanıyor sanki ama onu int tanımlayıncada olmuyor .ToString() komutunu silincede olmuyor burda takıldım.

    Gelen değeri int veri türüne çevirmeniz gerekiyor, bunun için int.Parse(okuyucu[0].ToString()); kodunu kullanabilirsiniz. Bu arada veri türleri konusunda biraz eksiğiniz olduğunu düşünüyorum, veri türleri konusuna tekrar göz atmanız faydalı olacaktır.

    Tekrardan kolay gelsin...
  • Giriş dizesi doğru biçimde değildi. gelen hata
  • quote:

    Orijinalden alıntı: donkiman

    Giriş dizesi doğru biçimde değildi. gelen hata

    Veritabanından tam sayı değeri geldiğine emin misiniz? Gelen değeri ekrana yazdırdığınız da ondalık sayı çıkıyorsa demek ki tam sayı değeri gelmiyor demektir o zaman double yada float kullanmak durumundasınız.
  • çok teşekkürler şimdi oldu. iyi çalışmalar.
  • quote:

    Orijinalden alıntı: donkiman

    çok teşekkürler şimdi oldu. iyi çalışmalar.

    Rica ederim, yardımcı olabilmiş isem ne mutlu bana. Fakat dediğim gibi veri türleri konusunu tekrar etmeniz gerekiyor.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.