Skip to main content

AccessTr.neT


Acil "error Converting Data Type Varchar To Numeric" Hatası

Acil "error Converting Data Type Varchar To Numeric" Hatası

Çözüldü #1
Kod:
System.Data.SqlClient.SqlException: 'Error converting data type varchar to numeric.'
Kod:
                baglanti.Open();
                SqlCommand ekle = new SqlCommand("insert into BiletBilgi(TicketID,Ad,Soyad,DogumTarihi,KimlikNo,TelNo,EmailAdresi,Cinsiyet,Nereden,Nereye,BiletTarihi,TrenSaati,Vagon,KoltukNo,Indirim,Ucret) values('" + textBox9.Text + "','" + textBox1.Text + "','" + textBox2.Text + "','" + dateTimePicker1.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox8.Text + "','" + comboBox6.Text + "','" + comboBox2.Text + "','" + comboBox3.Text + "','" + dateTimePicker2.Text + "','" + comboBox1.Text + "','" + comboBox4.Text + "','" + textBox5.Text + "','" + comboBox7.Text + "','" + textBox7.Text + "')", baglanti);
                ekle.ExecuteNonQuery();
                ekle.Dispose();
                baglanti.Close();
                MessageBox.Show("Bilet Rezervasyon başarılı");

Öğrenciyim okul projesi için otomasyon yapıyorum bu hata ile karşılaştım çözmek için baya uğraştım açıkcası ya beceremedim ya da sorunu bir türlü çözmedi. 

Anladığım kadarıyla hata datepickerın date formatıyla Sql date formatının uyuşmamasından kaynaklanıyor datepicker formatı short'a ayarlı Gün ay yıl şeklinde bunu nasıl çözerim ? Detaylı şekilde anlatırsanız memnun olurum çok fazla bilgim yok
Son Düzenleme: 09/12/2020, 19:56, Düzenleyen: kassius.
Cevapla
#2
(09/12/2020, 19:55)kassius yazdı: ,'" + dateTimePicker1.Text + "',
VBten anlamam ama yukardaki fonksiyonda tarih alanını tek tırnak' arasına almışsınız sadece metinsel veriler tırnak içine alınır, tarih için tam olarak bilmiyorum ama 2 yol önerebilirim
1 -
," + dateTimePicker1.Text + ",
2 -
,#" + dateTimePicker1.Text + "#,

.Nette tarih türü tam olarak ne double, long ....?
Cevapla
#3
(09/12/2020, 20:17)berduş yazdı:
(09/12/2020, 19:55)kassius yazdı: ,'" + dateTimePicker1.Text + "',
VBten anlamam ama yukardaki fonksiyonda tarih alanını tek tırnak' arasına almışsınız sadece metinsel veriler tırnak içine alınır, tarih için tam olarak bilmiyorum ama 2 yol önerebilirim
1 -
," + dateTimePicker1.Text + ",
2 -
,#" + dateTimePicker1.Text + "#,

.Nette tarih türü tam olarak ne double, long ....?



ilkinde şu hatayı veriyor 'Incorrect syntax near '.2020'.'

ikincisinde şu hatayı alıyorum 'Incorrect syntax near '.12'.'
Cevapla
#4
Tarih verisini doublea cevirme fonksiyonu var mı cdbl(tarih) gibi?
," +  cdbl(dateTimePicker1.Text) + ",
Cevapla
#5
Hata nedeni sorgunuz sayısal hale dönüştürmek mümkün olmayan varchar'ı dönüştürmeye çalışıyor. ancak tablo ve veri yapılarınızı görmedençözüm önerileri fikir yürütmekten ibaret olacak gibi. sorgunuzu parça parça ekleyerek deneyin ve hataya sebep olan alanı net olarak tespit edin öncelikle.
Asıl sorun ise sayısal verileri VARCHAR veya NVARCHAR sütunlarında depolamanız, veritabanınızı tasarlarken datatypelar çok çok önemli buna özen göstermelisiz.
Cevapla
#6
Kod:
                using (SqlCommand ekle = new SqlCommand(@"insert into BiletBilgi2
               (Ad, Soyad, DogumTarihi, KimlikNo, TelNo, EmailAdresi, Cinsiyet, Nereden, Nereye, BiletTarihi, TrenSaati, Vagon, KoltukNo, Indirim, Ucret) values
               (@Ad, @Soyad, @DogumTarihi, @KimlikNo, @TelNo, @EmailAdresi, @Cinsiyet, @Nereden, @Nereye, @BiletTarihi, @TrenSaati, @Vagon, @KoltukNo, @Indirim, @Ucret)",
               baglanti))
                {
                   
                    ekle.Parameters.Add("@Ad", SqlDbType.NText).Value = textBox1.Text.ToString();
                    ekle.Parameters.Add("@Soyad", SqlDbType.NText).Value = textBox2.Text.ToString();
                    ekle.Parameters.Add("@DogumTarihi", SqlDbType.Date).Value = dateTimePicker1.Value.Date;
                    ekle.Parameters.Add("@KimlikNo", SqlDbType.Float).Value = float.Parse(textBox3.Text);
                    ekle.Parameters.Add("@TelNo", SqlDbType.Float).Value = float.Parse(textBox4.Text);
                    ekle.Parameters.Add("@EmailAdresi", SqlDbType.NText).Value = textBox8.Text.ToString();
                    ekle.Parameters.Add("@Cinsiyet", SqlDbType.NText).Value = comboBox6.Text.ToString();
                    ekle.Parameters.Add("@Nereden", SqlDbType.NText).Value = comboBox2.Text.ToString();
                    ekle.Parameters.Add("@Nereye", SqlDbType.NText).Value = comboBox3.Text.ToString();
                    ekle.Parameters.Add("@BiletTarihi", SqlDbType.Date).Value = dateTimePicker2.Value.Date;
                    ekle.Parameters.Add("@TrenSaati", SqlDbType.NText).Value = comboBox1.SelectedItem.ToString();
                    ekle.Parameters.Add("@Vagon", SqlDbType.NText).Value = comboBox4.Text.ToString();
                    ekle.Parameters.Add("@KoltukNo", SqlDbType.Int).Value = int.Parse(textBox5.Text);
                    ekle.Parameters.Add("@Indirim", SqlDbType.NText).Value = comboBox7.Text.ToString();
                    decimal.TryParse(textBox7.Text, out decimal ucret);
                    ekle.Parameters.Add("@Ucret", SqlDbType.Int).Value = ucret;

                    baglanti.Open();
                    ekle.ExecuteNonQuery();
                    baglanti.Close();
                }
                MessageBox.Show("Bilet Rezervasyon başarılı");

Bir arkadaşa ekran paylaştım yardım etti son değişiklikler böyle. Teşekkürler
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da