none
Access-Datenbank Anbindung DELETE Befehl Problem. RRS feed

  • 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
    Montag, 7. März 2016 22:08

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

    Montag, 7. März 2016 22:18
    Moderator

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

    Montag, 7. März 2016 22:16
  • 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

    Montag, 7. März 2016 22:18
    Moderator
  • Erstmal danke für die schnelle Antwort.

    Der Inhalt ist eine selbst eingegebene Zahl (eine exestierende ID aus der Access Datenbank) dessen Zeile es mir dann aus meiner Datenbank löschen soll.

    Mfg

    Montag, 7. März 2016 22:21
  • Hi Max,

    tbid.Text ist Text, den Du ja bereits in id als Zahl um gewandelt hast. Korrekt muss es also heißen:

    "Delete From Personen WHERE ID = " + id;

    Dienstag, 8. März 2016 06: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

    Dienstag, 8. März 2016 07:48
    Moderator
  • Besten dank an euch.

    Hat alles Funktioniert (Habe Parameter verwendet).

    Dienstag, 8. März 2016 14:58