Benutzer mit den meisten Antworten
Access-Datenbank Anbindung DELETE Befehl Problem.

Frage
-
Hey Leute :)
Ich habe folgendes Problem,
int id = Convert.ToInt32(tbid.Text);
con = new OleDbConnection(connect);
con.Open();
sql = con.CreateCommand();
sql.CommandText = "DELETE * FROM Personen WHERE ID = " + tbid.Text;
sql.ExecuteNonQuery();und zwar wollte ich auf Knopfdruck per ID eine Zeile aus meiner Datenbank löschen. Das gleiche Funktioniert mit dem SELECT befehl hervorragend, doch beim DELETE Befehl bekomme ich "Die Eingabezeichenfolge hat das falsche Format." als Fehlermeldung.
Ich bedanke mich im vorraus :)
Mfg
- Bearbeitet Max_N Montag, 7. März 2016 22:13
Antworten
-
Hi,
zum einen schreib einfach
DELETE FROM Personen WHERE ID = 123
Lass also den * nach DELETE weg.
zum anderen wird dann wohl in tbid.Text nichts sinnvolles drinstehen. Poste bitte das, was nach der entsprechenden Zeile in sql.CommandText steht.
Aber so grundsätzlich solltest Du von dem Einbasteln von Werten per Stringverkettung in SQL Statements wegkommen und Parameter verwenden.
int id; if( Int32.TryParse( tbid.Text, id ) ) { ... sql.CommandText "DELETE FROM Personen WHERE ID = ?" sql.Parameters.AddWithValue( "?", id ); sql.ExecuteNonQuery(); }
https://msdn.microsoft.com/de-de/library/system.data.oledb.oledbparameter.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Roland Franz Dienstag, 8. März 2016 07:57
- Als Antwort markiert Aleksander Chalabashiev Donnerstag, 31. März 2016 14:53
Alle Antworten
-
Hallo Max,
ich glaube das Problem ist was in tbid.Text zu diesem Zeitpunkt steht. Was genau ist der Inhalt von tbid.Text wenn diese Fehlermeldung kommt?
Gruß
Rudolf
"Der Nachteil der Intelligenz besteht darin, dass man ununterbrochen gezwungen ist, dazuzulernen." Georg Bernhard Shaw -
Hi,
zum einen schreib einfach
DELETE FROM Personen WHERE ID = 123
Lass also den * nach DELETE weg.
zum anderen wird dann wohl in tbid.Text nichts sinnvolles drinstehen. Poste bitte das, was nach der entsprechenden Zeile in sql.CommandText steht.
Aber so grundsätzlich solltest Du von dem Einbasteln von Werten per Stringverkettung in SQL Statements wegkommen und Parameter verwenden.
int id; if( Int32.TryParse( tbid.Text, id ) ) { ... sql.CommandText "DELETE FROM Personen WHERE ID = ?" sql.Parameters.AddWithValue( "?", id ); sql.ExecuteNonQuery(); }
https://msdn.microsoft.com/de-de/library/system.data.oledb.oledbparameter.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Roland Franz Dienstag, 8. März 2016 07:57
- Als Antwort markiert Aleksander Chalabashiev Donnerstag, 31. März 2016 14:53
-
Hallo Ralf,
nö, ganz korrekt wäre dann:
"Delete From Personen WHERE ID = " + id.ToString();
Aber auch das ist Quark, man stellt keine SQL Statements in der Form zusammen. Arbeitet mit Parametern, das macht allen das Entwicklerleben leichter.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community