AccessTr.neT

Tam Versiyon: C# İnsert İnto Hatası
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Merhaba;

C# ta Access veritabanı kullanarak veri kaydetmeye çalışıyorum. Daha önce vb.net te defalarca kullandığım ve hiç hata almadığım kodu internetteki örneklerden de yararlanarak C# a uyarladım. Ancak kod "insert into söz diziminde hata" şeklinde hata vermektedir. Kodu inceledim herhangi bir hata göremedim. İnternette araştırma yaptım "not, is" gibi cümleler programın içerisinde daha öncede ayrılmış alanlar olduğu için hata verdiğini ve bu cümlelerin kullanılmaması gerektiğini belirten bir yazı okudum. Bu alanları içeren kısımları düzelttim ancak yinede hata vermektedir.

Kullanmış olduğum kod;
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0;Data Source='veritabani.accdb'");
           if (con.State == ConnectionState.Closed || con.State == ConnectionState.Broken)
               con.Open();
           String cmd;
           cmd = ("INSERT INTO t_firma(sira_numarasi,firma_unvan,firma_telefon,firma_faks,firma_mail,firma_adres,firma_ulke,firma_tipi,firma_mesaj,kayit_kullanici,kayit_tarihi) values (" + txtSiraNumarasi.Text + " , '" + txtFirmaUnvani.Text + "' , '" + txtFirmaTelefon.Text + "' ,'" + txtFirmaFaks.Text + "' , '" + txtFirmaMail.Text + "' , '" + txtFirmaAdres.Text + "' , '" + txtFirmaUlke.Text + "' , '" + txtFirmaTipi.Text + "' , '" + txtFirmaNot.Text + "' , '" + txtEkleyenKull.Text + "' , " + txtEklemeTarih.Text + "");
           OleDbCommand kaydet = new OleDbCommand(cmd, con);
           kaydet.ExecuteNonQuery();
           con.Close();


Yazı ve sayı alanlarındaki farklılıkları da kontrol ettim (tek tırnak çift tırnak alanlarını) onlarda doğru neyden dolayı hata veriyor bir türlü bulamadım.
Örnek dosyada ektedir.

[attachment=26080]
Bu şekilde INSERT INTO işlemi ile yanlış yapıyorsunuz. Parametreli kullanım ile veri eklemeniz lazım yoksa virgüllü bir değer eklenirse sıkıntı yaşarsınız. Ayrıca güvenlik açısından da ciddi sıkıntı olur.

Sorunuza gelecek olursak Sql cümlenizi yanlış yazmışsınız. cmd = ( ile başlayan yerdeki ( işaretini kaldırın. Satırın sonu ise şu şekilde bitmeli:

 '" + txtEklemeTarih.Text + "')";
Alpeki hocam;

Tavsiyeniz için teşekkür ederim. Parametre kullanımının önemi bilmiyordum internette de hiç denk gelmemiştim.

Daha önce vb.net te veritabanına özel karakter kaydetmek istediğimde (" ' . / vb.) hata veriyordu hiç bundan dolayı olabileceğini düşünmemiştim.

Sorun alpeki hocamın parametre tavsiyesi sayesinde çözülmüştür.

Saygılar.