Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
11
Cevap
11130
Tıklama
0
Öne Çıkarma
c# sqlden gelen veriyi değişkene atmak
D
13 yıl (64 mesaj)
Çavuş
Konu Sahibi

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();

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



S
13 yıl (12 mesaj)
Er

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 >
Bu mesaja 1 cevap geldi.
D
13 yıl (64 mesaj)
Çavuş
Konu Sahibi

'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 >
Bu mesaja 2 cevap geldi.
S
13 yıl (12 mesaj)
Er

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 >

Ö
13 yıl (929 mesaj)
Yüzbaşı

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


Bu mesaja 1 cevap geldi.
D
13 yıl (64 mesaj)
Çavuş
Konu Sahibi

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();
}}


Bu mesaja 1 cevap geldi.
D
13 yıl (64 mesaj)
Çavuş
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.
Ö
13 yıl (929 mesaj)
Yüzbaşı

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


Bu mesaja 1 cevap geldi.
D
13 yıl (64 mesaj)
Çavuş
Konu Sahibi

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


Bu mesaja 1 cevap geldi.
Ö
13 yıl (929 mesaj)
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
D
13 yıl (64 mesaj)
Çavuş
Konu Sahibi

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


Bu mesaja 1 cevap geldi.
Ö
13 yıl (929 mesaj)
Yüzbaşı

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.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.