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);
}
Antwort
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.
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) –
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 –
@Damien_The_Unbeliever: Interessant, ich finde Beispiele in beiden Richtungen. Zugegebenermaßen habe ich im Moment keine Gelegenheit zu testen. – David
- 1. Access VBA: Anzahl der Abfragewerte und Zielfelder sind nicht identisch
- 2. Erste Laufzeitfehler ‚3346‘: Anzahl der Abfragewerte und Zielfelder sind nicht die gleichen
- 3. history.pushState() ändern Abfragewerte
- 4. Ausblenden und Anzeigen der Anzahl der Zeilen in einer Tabelle, die die gleiche ID teilen
- 5. LIMIT gibt nicht immer die gleiche Anzahl von Zeilen zurück
- 6. boost :: zufällig die gleiche Anzahl jedes Mal
- 7. Iterate über alle Abfragewerte in C#
- 8. Ist Tuple2 und Pair die gleiche Sache oder nicht?
- 9. Die Variable ist nicht das Gleiche nach der Rückkehr
- 10. Python-Liste ist nicht der gleiche Bezug
- 11. Mein JButton ist die Anzeige nicht konsequent, es ist nicht die gleiche Größe und nicht an der gleichen Stelle
- 12. SQL Get Anzahl aller Zeilen, die die gleiche ID haben
- 13. Wie ist die Anzahl der Ansichten begrenzt?
- 14. "Die Anzahl der Spalten entspricht nicht der Anzahl der Werte in der Zeile", aber es gibt
- 15. Suchen Zeile, wo seine ID ist in einer Liste und Anzahl ist das gleiche
- 16. Ist die Anzahl der Aufgaben begrenzt?
- 17. Die Anzahl der Wörterbücher wird nicht angezeigt
- 18. Python/Sammlungen - Entfernen Sie Elemente, die gleiche Anzahl, wie oft
- 19. Abfragewerte zu finden, die während des Zeitintervalls auftreten, wo die Zeit vom Vortag beginnen ist
- 20. ist die Anzahl der Aufrufe von navigator.geolocation.getCurrentPostion begrenzt?
- 21. Warum ist die Anzahl der "abgerechneten" Instanzen so viel größer als die Anzahl der "aktiven" Instanzen?
- 22. Fehler in Confusion Matrix: die Daten und Referenzfaktoren müssen die gleiche Anzahl von Ebenen haben
- 23. Zählen Sie die Anzahl der verschiedenen IDs, die das gleiche Elternteil haben
- 24. Sollten wir Datenbankindizes für Zeilen erstellen, die die gleiche Anzahl von Lese-/Such- und Schreibvorgängen haben?
- 25. Berechne die Anzahl der Monate von der Anzahl der Tage
- 26. Fehler in ConfusionMatrix die Daten und Referenzfaktoren müssen die gleiche Anzahl von Ebenen haben R CARET
- 27. Das gleiche Objekt ist nicht immer das Gleiche?
- 28. die Form [Eingabe] Breite ist nicht das gleiche in IE
- 29. Gruppiere und zähle die Anzahl der Vorkommen einer ObjectID, die in zwei separaten Feldern gespeichert ist.
- 30. Link ist nicht die gleiche Höhe wie untergeordnete Elemente
Ich schlage vor, parametrisierte Abfragen verwenden – Valentin
i nehme an, Sie haben einen ' '' Charakter in einem Ihrer Textfelder – fubo
Bitte setzen Sie * Bruchstelle * auf 'command.ExecuteNonQuery();' Linie und liefern * Ist * 'Command.CommandText 'Wert –