2016-03-23 3 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

Ich schlage vor, parametrisierte Abfragen verwenden – Valentin

+2

i nehme an, Sie haben einen ' '' Charakter in einem Ihrer Textfelder – fubo

+0

Bitte setzen Sie * Bruchstelle * auf 'command.ExecuteNonQuery();' Linie und liefern * Ist * 'Command.CommandText 'Wert –

Antwort

1

Die Wurzel des Problems ist, dass Sie nicht wirklich wissen, was Abfrage Sie ausführen. Weil Sie Code ausführen, den Ihre Benutzer Ihnen senden,.

In den meisten Nicht-Rand Fällen erscheint „arbeiten ganz gut“ (weshalb es oft unbemerkt), in einigen Fällen ist es eine Syntax oder strukturelle Fehler in der Abfrage verursacht (das ist hier, was passiert) und in einigen Fällen nutzen Benutzer sie aus, um beliebigen Code in Ihrer Datenbank auszuführen.

Dies ist eine SQL injection Schwachstelle.

Sie würden dies korrigieren, indem Sie Abfrageparameter verwendet, die Benutzereingabe als Werte behandeln anstatt als ausführbaren Code. Etwas wie folgt aus:

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(); 

Bitte beachte, dass ich auf der OleDbType und Größe der Spalten erraten haben. Passen Sie wie für Ihre Tabellenstruktur erforderlich an.

+0

Ole DB-Anbieter unterstützt keine benannten Parameter - Sie sollten '?' Im 'CommandText' verwenden (und sicherstellen, dass, wie Sie bereits hier getan haben, die Parameter den' Parameters' hinzugefügt werden) Sammlung in der richtigen Reihenfolge) –

+0

Vielen Dank für Ihre Antwort, ich habe das behoben, und jetzt bekomme ich den "" Index oder Primärschlüssel kann keinen Nullwert enthalten "Fehler", aber alles scheint mir korrekt –

+0

@Damien_The_Unbeliever: Interessant, ich finde Beispiele in beiden Richtungen. Zugegebenermaßen habe ich im Moment keine Gelegenheit zu testen. – David

Verwandte Themen