none
MySQL Parameter undefiniert RRS feed

  • Frage

  • Hallo alle,

    Ich möchte Daten in einer MySQL- Datenbank speichern. Als INSERT Anweisung benutze ich folgendes:

    //SQL Skript zusammenbauen
    sql = "SET @artnumsn:=(SELECT sn FROM artnum WHERE dkwnum='" + artikel + "');" +
          "SET @lfdnrsn:=(SELECT MAX(sn) FROM messzähler WHERE artikel=@artnumsn AND lfdnr_int=" + lfdnr_int + ");" +
          "SET @versionn:=(SELECT MAX(versionn) FROM magnetwerte_soll WHERE artikel=@artnumsn);" + 
          "SET @mpsnnord:=(SELECT sn FROM magnetwerte_soll WHERE mp_text='Nord' AND versionn=@versionn);" +
          "SET @mpsnnull:=(SELECT sn FROM magnetwerte_soll WHERE mp_text='0' AND versionn=@versionn);" +
          "SET @mpsnsued:=(SELECT sn FROM magnetwerte_soll WHERE mp_text='Süd' AND versionn=@versionn);" +
          "INSERT INTO magnetwerte_ist (artikel,lfdnr_int,mp,ist,abw,io) VALUES " +
             "(@artnumsn, @lfdnrsn, @mpsnnord, " + istnord + ", " + abwnord + ", " + ionord + ");" +
          "INSERT INTO magnetwerte_ist (artikel,lfdnr_int,mp,ist,abw,io) VALUES " +
             "(@artnumsn, @lfdnrsn, @mpsnnull, " + istnull + ", " + abwnull + ", " + ionull + ");" +
          "INSERT INTO magnetwerte_ist (artikel,lfdnr_int,mp,ist,abw,io) VALUES " +
             "(@artnumsn, @lfdnrsn, @mpsnsued, " + istsüd + ", " + abwsüd + ", " + iosüd + ");";

    Danach folgt:

    MySqlCommand cmd;
     
    cmd = mysqlcon.CreateCommand();
    cmd.CommandText = sql;
    try
    {
        this.ÖffneVerbindung();
        cmd.ExecuteNonQuery();
        this.SchließeVerbindung();
    }

    Während der Ausführung tritt der folgende Fehler auf: "Parameter @artnumsn must be defined". Wenn ich den gebauten SQL- String in die MySQL Workbench einfüge, funktioniert's.

    Jemand eine Idee waum nicht im Programm?

    Dank im Voraus.

    Grüße
    Heiko

    Montag, 15. Oktober 2012 07:25

Antworten

  • Hallo Heiko,

    Du weist zwar diverse Parameter zu, aber wo sind die Deklarationen dafür?
    Wenn Du sie nicht im MySqlCommand erzeugst, so müssen sie mit DECLARE erstellt werden,
    siehe 13.6.4. Variables in Stored Programs

    Anstatt hier einen langen SQL String zusammenbauen, würde es sich hier anbieten,
    eine Stored Procedure zu erstellen und dort die notwendigen Parameter (artikel, istnord usw.) zu übergeben.
    So entfällt die fehleranfällige Stringerei und Du kannst die Prozedur in der Workbench testen und bei Bedarf leichter anpassen.

    Gruß Elmar

    • Als Antwort markiert Heiko Sturm Montag, 15. Oktober 2012 13:44
    Montag, 15. Oktober 2012 08:32

Alle Antworten

  • Hallo Heiko,

    Du weist zwar diverse Parameter zu, aber wo sind die Deklarationen dafür?
    Wenn Du sie nicht im MySqlCommand erzeugst, so müssen sie mit DECLARE erstellt werden,
    siehe 13.6.4. Variables in Stored Programs

    Anstatt hier einen langen SQL String zusammenbauen, würde es sich hier anbieten,
    eine Stored Procedure zu erstellen und dort die notwendigen Parameter (artikel, istnord usw.) zu übergeben.
    So entfällt die fehleranfällige Stringerei und Du kannst die Prozedur in der Workbench testen und bei Bedarf leichter anpassen.

    Gruß Elmar

    • Als Antwort markiert Heiko Sturm Montag, 15. Oktober 2012 13:44
    Montag, 15. Oktober 2012 08:32
  • Hallo Elmar,

    hab's als Stored Procedure umgesetzt. Funktioniert wunderbar.

    Danke.

      Heiko

    Montag, 15. Oktober 2012 13:45