none
Eintrag aus Access Datenbank löschen RRS feed

  • 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
    Donnerstag, 22. Dezember 2016 20:08

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

    Donnerstag, 22. Dezember 2016 22:15
    Moderator

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

    Donnerstag, 22. Dezember 2016 22:15
    Moderator
  • Vielen Dank für die Hilfe.

    Ich werde es heute Abend gleich mal probieren.

    Danke auch für die weiteren Hinweise. Ich bin wie gesagt noch bei meinen ersten Versuchen und über jeden Hinweis Dankbar.

    Freitag, 23. Dezember 2016 09:56