Announcement

Collapse
No announcement yet.

Lösung für INSERT leerer Textbox in MySQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Lösung für INSERT leerer Textbox in MySQL

    Hallo zusammen,

    ich habe folgendes Problem: Ich möchte mit C# Daten aus mehreren Texboxen in eine MySQL-DB speichern. Dazu habe ich den üblichen INSERT-Befehl genutzt:

    "INSERT INTO TABLE (Name, Alter,... usw ... ) VALUES ('" + textbox1.text + "'," + ConvertToInt16(textbox2.text.ToString()) + "," ... );"

    Das funktioniert auch prima, nur wenn eine Textbox leer ist, dann kommt die Fehlermeldung, dass "einige Datentypen nicht übereinstimmen".

    Nun Meine Frage, wie kann ich die Textboxen behandeln, damit sie die MySQL-Anweisung überstehen?

    Anmerkung: Ich möchte gerade von Access in MySQL umsteigen. Mit Access lief das nämlich einwandfrei.

    Danke im vorraus.
    Zuletzt editiert von DBorni; 24.08.2007, 12:17.

  • #2
    1, Welche Provider verwendest du und falls es über ODBC geht sind auch die nötigen Einstellungen im ODBC-Treiber für ADO(.NET) vorgenommen (nachzulesen auf MySQL-Webseite)

    2, Direkte angaben von Werten ist immer schlecht (SQL-Injection). a zb. ein Wert in textbox1 der art: '; DROP Table ....; //' nicht gerade gut für deine Datenbank ist.

    3, Egal von welcher DB man auf eine ander wechselt. Man muß praktisch immer Anpassungen vornehmen wenn man keine entsprechenden Frameworks wie ECO oder NHypernate verwendet.

    Comment


    • #3
      1, Welche Provider verwendest du und falls es über ODBC geht sind auch die nötigen Einstellungen im ODBC-Treiber für ADO(.NET) vorgenommen (nachzulesen auf MySQL-Webseite)

      Ja, ODBC. Aber dass man da sowas einstellen kann ist mir neu. Auf der MySQL-Site hab ich da nicht viel gefunden. Wenn du schnell ne Lösung parat hast, wäre ich dir dankbar.

      2, Direkte angaben von Werten ist immer schlecht (SQL-Injection). a zb. ein Wert in textbox1 der art: '; DROP Table ....; //' nicht gerade gut für deine Datenbank ist.
      Hm, das kann ich nochvollziehen. Aber da würde mir jetzt auch nichts anderes einfallen außer die Werte direkt einzufügen. Kannst du helfen?

      Comment


      • #4
        Originally posted by DBorni View Post
        1, Welche Provider verwendest du und falls es über ODBC geht sind auch die nötigen Einstellungen im ODBC-Treiber für ADO(.NET) vorgenommen (nachzulesen auf MySQL-Webseite)

        Ja, ODBC. Aber dass man da sowas einstellen kann ist mir neu. Auf der MySQL-Site hab ich da nicht viel gefunden. Wenn du schnell ne Lösung parat hast, wäre ich dir dankbar.
        Selbst ist der man. Ich würde eher empfehlen du suchst dir einen ADO.NET-Provider (Kostenpflichtig z.B. http://crlab.com/mysqlnet/) und läßt die potentiellen Fehlerquellen OLE DB und ODBC und MySQLLib links liegen.

        Originally posted by DBorni View Post
        2, Direkte angaben von Werten ist immer schlecht (SQL-Injection). a zb. ein Wert in textbox1 der art: '; DROP Table ....; //' nicht gerade gut für deine Datenbank ist.
        Hm, das kann ich nochvollziehen. Aber da würde mir jetzt auch nichts anderes einfallen außer die Werte direkt einzufügen. Kannst du helfen?
        Findest du nix in den Beispielen vom Framework? Komm aus der Delphi-Win32-Ecke. Aber das Problem von SQL-Injection ist unabhängig von der Programmiersprache.

        Comment


        • #5
          Kurzfassung:
          Code:
          MySqlCommand cmd = new MySqlCommand(connection);
          cmd.CommandText = "INSERT INTO TABLE (Name, Alter,... usw ... ) VALUES (?, ? ...?);
          //  wie die Parameter bezeichnet werden müssen, hängt vom DbProvider ab
          cmd.Parameters.AddWithValue("newName", "Hermann Maier");
          cmd.Parameters.AddWithValue("newAlter", 46);
          Als Werte kannst Du auch TextBox7.Text eintragen; damit werden leere Strings problemlos übertragen. Ob Du Zahlen vorher konvertieren musst oder Dich auf den Provider verlassen kannst, weiß ich (noch) nicht:
          Code:
          cmd.Parameters.AddWithValue("newName", TextBox7.Text);
          //  vielleicht klappt:
          cmd.Parameters.AddWithValue("newAlter", TextBox9.Text);
          //  vielleicht ist nötig:
          cmd.Parameters.AddWithValue("newAlter", Convert.ToInt32(TextBox9.Text));
          Falls Dir Grundlagen fehlen, ist das OpenBook C# Kap. 26 eine gute Adresse.

          Viel Erfolg! Jürgen

          Comment

          Working...
          X