Benutzer mit den meisten Antworten
Eintrag aus Access Datenbank löschen

Frage
-
Hallo,
ich versuche gerade meine ersten Schritte in C#.
Ich möchte aus einer Datenbank (Access) einen Eintrag löschen.Dazu habe ich mir das Tutorial "C# MS Access Database Tutorial 8 # Deleting selected data from database" angeschaut. Leider bekomme ich bei mir Fehler gemeldet wenn ich das Programm ausführe. Hier ist mein Programmausschnitt:
try { connection.Open(); OleDbCommand command = new OleDbCommand(); command.Connection = connection; string query = "delete * from Personal where Nachname="+ woerter[0] +""; listBox1.Items.Add(query); command.CommandText = query; int test=0; command.ExecuteNonQuery(); MessageBox.Show("Benutzer gelöscht!"); } catch (Exception ex) { string exStr = ex.ToString(); MessageBox.Show(exStr); } connection.Close();
Der Fehler beim Ausführen:
System.Data.OleDbExcetion(0x80040E10): Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.
Der verweis geht auf die Zeile:
command.ExecuteNonQuery();
Ich habe mir auch mal den Text vom "query" ausgeben lassen:
delete * from Personal where Nachname=Hord
as habe ich falsch gemacht?
- Bearbeitet burns1111 Donnerstag, 22. Dezember 2016 20:10
Antworten
-
Hi,
Zeichenfolgen müssen in Hochkommata eingefasst werden.
string query = String.Format( "DELETE FROM Personal WHERE Nachname = '{0}'", woerter[0] );
Damit würde es dann gehen.
Aber: Mit solchen Konstrukten handelst Du dir SQL Injection Probleme ein. Das mag dir jetzt noch soweit unproblematisch erscheinen aber irgendwann wirst Du deswegen wahrscheinlich unsanft aus deinen Träumen geholt.
Daher mach es gleich richtig und verwende immer Parameterobjekte, in deinem Fall OleDbParameter.
Ein Beispiel (wenn auch ursprünglich für einen anderen Zweck, passt für deine Sache aber ganz genau^^) findest Du hier:
OleDbParameter in Reihenfolge verwenden
Beachte auch die Hinweise dort hinsichtlich der Reihenfolge der Parameter. SqlParameter und andere kann man mit ihrem Namen verwenden, OleDbParameter nicht.
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 Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 27. Dezember 2016 11:38
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 6. Januar 2017 09:44
Alle Antworten
-
Hi,
Zeichenfolgen müssen in Hochkommata eingefasst werden.
string query = String.Format( "DELETE FROM Personal WHERE Nachname = '{0}'", woerter[0] );
Damit würde es dann gehen.
Aber: Mit solchen Konstrukten handelst Du dir SQL Injection Probleme ein. Das mag dir jetzt noch soweit unproblematisch erscheinen aber irgendwann wirst Du deswegen wahrscheinlich unsanft aus deinen Träumen geholt.
Daher mach es gleich richtig und verwende immer Parameterobjekte, in deinem Fall OleDbParameter.
Ein Beispiel (wenn auch ursprünglich für einen anderen Zweck, passt für deine Sache aber ganz genau^^) findest Du hier:
OleDbParameter in Reihenfolge verwenden
Beachte auch die Hinweise dort hinsichtlich der Reihenfolge der Parameter. SqlParameter und andere kann man mit ihrem Namen verwenden, OleDbParameter nicht.
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 Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 27. Dezember 2016 11:38
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 6. Januar 2017 09:44