İyi geceler benim bir projem var benim sorunum textboxa girilen verileri listboxa atmak oradan da toplu bir şekilde veri tabanına göndermek ancak must declare the scalar variable @siparis_miktar diye hata alıyorum kod satırları bunlar:
private void button2_Click(object sender, EventArgs e) { DateTime bugun = DateTime.Now; try { if (connect.State == ConnectionState.Closed) connect.Open(); string kayit = "insert into siparis_tbl(siparis_urun,tedarikci_id,isletme_id,siparis_miktar,tarih) values(@siparis_urun,@tedarikci_id,@isletme_id,@siparis_miktar,@tarih)"; SqlCommand komut = new SqlCommand(kayit, connect); foreach (string siparis in listBox1.Items) { komut.Parameters.AddWithValue("@siparis_urun", siparis); komut.Parameters.AddWithValue("@isletme_id", bilgi5.id); komut.Parameters.AddWithValue("@tedarikci_id", tdrk1.id); komut.Parameters.AddWithValue("@tarih", bugun); komut.ExecuteNonQuery(); } foreach (string siparis_miktar in listBox2.Items) { komut.Parameters.AddWithValue("@siparis_miktar",Convert.ToInt32(siparis_miktar)); komut.ExecuteNonQuery(); } komut.ExecuteNonQuery(); connect.Close(); MessageBox.Show("Siparişiniz Gönderildi"); } catch (Exception hata) { MessageBox.Show("Siparişiniz Gönderilemedi" + hata.Message); } }
Düzeltme 1: Kod formata uygun şekilde eklendi.
Düzeltme2: Konu C# Forumuna taşındı.
komut.ExecuteNonQuery(); fonksiyonunu bir kere, verilerin tamamı göndermeden önce kullanın. Bu kodu fazla değiştirmek istemiyorsanız, foreachlar ile aldığınız verileri geçici bir yere yazdırın, ardından son bir gönderme kısmı oluşuturup topladığınız verilerin tamamını bir kerede yollayın ve komut.ExecuteNonQuery(); komutunu orada kullanın.
Düzeltme 1:
Komutu parametrelerin sadece yarısı ile çalıştıramazsınız, ardından diğer yarısı ile çalıştıramazsınız. Tüm parametreleri tek seferde bildirmeniz ve iletmeniz gerekir. Ayrıca, bunu bir döngüde çalıştırırsanız, parametreleri yeniden eklemeden önce temizlemeniz gerekir. Her durumda, bu toplu ekleme için gerçekten yavaş bir yoldur, muhtemelen bunun yerine SqlBulkCopy kullanmalısınız. Ayrıca bağlantınızı ve komutunuzu kullanarak elden çıkarmalısınız, bağlantı nesnenizi önbelleğe almayın.