2016-03-23 16 views
0
try 
{ 
     connection.Open(); 
     OleDbCommand komanda = new OleDbCommand(); 
     command.Connection = konekcija; 
     command.CommandText = "insert into EmployeeData (FirstName,LastName,Pay) values('"+txt_fname.Text+"','"+txt_lname.Text+"','"+txt_pay.Text+"')"; 
     command.ExecuteNonQuery(); 
     MessageBox.Show("data saved"); 
     connection.Close(); 
} 
catch (Exception ex) 
{ 
     MessageBox.Show("error"+ex); 
} 
+0

ben seni command.ExecuteNonQuery() 'üzerinde metin kutularının – Valentin

+2

parametreli sorguları kullanmak önermek 'değeri – fubo

+0

ayarlayın * kırılma noktası * birinde' ' 'karaktere sahip varsayalım –

cevap

1

kök "sorgusu değerleri ve hedef alanların sayısı aynı değil" aslında yok sen yürütme şeyin sorgu biliyor olmam. Çünkü, kullanıcılarınızın size gönderdiği herhangi bir kodu yürütüyorsunuz. en olmayan kenar durumlarda bu yılında

(genellikle fark edilmeden giderse neden olan) "sadece iyi iş", bazı durumlarda sorguda bir söz dizimi veya yapısal hata (ki burada ne oluyor edilir) neden olur görünmektedir ve bazı durumlarda kullanıcılar veritabanınızda rasgele kod yürütmek için bundan faydalanırlar.

Buna, SQL injection güvenlik açığı denir.

Sen değerler yerine çalıştırılabilir kod olarak bir gibi kullanıcı girişi tedavi sorgu parametreleri kullanılarak Bunu düzeltmek istiyorum. Böyle bir şey: Ben sütunların OleDbType ve büyüklüğüne tahmin ettik

command.CommandText = "insert into EmployeeData (FirstName,LastName,Pay) values(?,?,?)"; 
command.Parameters.Add("@FirstName", OleDbType.VarChar, 50).Value = txt_fname.Text; 
command.Parameters.Add("@LastName", OleDbType.VarChar, 50).Value = txt_lname.Text; 
command.Parameters.Add("@Pay", OleDbType.VarChar, 50).Value = txt_pay.Text; 
command.ExecuteNonQuery(); 

Not. Tablo yapınız için gereken şekilde ayarlayın. `Hattı ve * gerçek *` command.CommandText sağlamak;

+0

Ole DB sağlayıcısı, adlandırılmış parametreleri desteklemiyor - 'CommandText'de'? 'Kullanmalısınız (ve burada yaptığınız gibi, parametrelerin' Parametreler'e eklendiğinden emin olun. doğru sırayla koleksiyon) –

+0

Cevabınız için çok teşekkür ederim, bunu düzelttim ve şimdi "" İndeksi veya birincil anahtar bir Boş değer içermiyor "hatası" alıyorum, ama her şey bana doğru görünüyor –

+0

@Damien_The_Unbeliever: İlginç, her iki şekilde de çevrimiçi örnekler buluyorum. Şüphesiz şu anda test etme fırsatım yok. – David

İlgili konular