AccessTr.neT

Tam Versiyon: Acil "error Converting Data Type Varchar To Numeric" Hatası
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
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
(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 -
Visual Basic Code
," + dateTimePicker1.Text + ",
2 -
Visual Basic Code
,#" + dateTimePicker1.Text + "#,

.Nette tarih türü tam olarak ne double, long ....?
(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 -
Visual Basic Code
," + dateTimePicker1.Text + ",
2 -
Visual Basic Code
,#" + 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'.'
Tarih verisini doublea cevirme fonksiyonu var mı cdbl(tarih) gibi?
Visual Basic Code
," +  cdbl(dateTimePicker1.Text) + ",
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.
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