Announcement

Collapse
No announcement yet.

Vb.net und MySQL Variable setzen

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

  • Vb.net und MySQL Variable setzen

    Hallo

    Ich muss in einer Query eine Variable setzen, die dann über eine Function in einer View genutzt wird.
    Also so in der Art:
    Set @lng = de
    Select * from lngView

    In der View in ist die Function Lang() die den Wert von @lng zurück gibt.

    Habe schon alles versucht, aber es scheint die Variable wird nie gefüllt.
    In MySQL kann ich per Query die Abfrage richtig setzten und klappt.

    Aber in Vb.net fehlt mir der Ansatz. Stored Procedure und Variable mit Übergeben ist klar, scheint hier aber nicht zu klappen.

    Danke

  • #2
    Variable Angaben in einem SQL-Befehl sind üblicherweise ein Fall für SQL-Parameter. Ersetze die Funktion Lang() durch den Parameter "?lang" bzw. "?" (je nachdem, was dein DbProvider erwartet) und benutze dann so etwas (hier der Code in C#, die Übersetzung in VB sollte nicht schwerfallen):
    [HIGHLIGHT=csharp]MySqlCommand cmd = new MySqlCommand();
    cmd.CommandText = "...";
    cmd.Parameters.AddWithValue("?lang", "de");[/HIGHLIGHT]
    Hier findest du mehr zu SQL-Parametern. Das bezieht sich zwar auf C#, ist aber auch .NET und kann deshalb problemlos übertragen werden.

    Jürgen

    Comment


    • #3
      Hallo Jürgen

      Vielen Dank. Aber das Setzen der globalen Variable macht Problem.
      Ich muss folgenden MySQL Query in vb absetzen:
      Code:
      Set @lang = 'de';
      SELECT * FROM GetPrefelangrredRoomType;
      Der folgende vb code bringt kein passendes Ergebnis:
      Code:
       mySQLCommand.CommandType = CommandType.Text
              mySQLCommand.CommandText = "SELECT * FROM GetPreferredRoomType;"
              mySQLCommand.Parameters.AddWithValue("@lang", "de")
              myReader = mySQLCommand.ExecuteReader
      Ich bekomme die Ausgabe aller englischen, was bedeutet das die globale Variable @lang nicht mit "de" gesetzt wurde.

      Die View ist:
      Code:
      SELECT o.object_ID,
             rt.roomType_ID,
             rt.Name,
             rt.Name_Short
      FROM   `objectPreferredRoomType` o
             LEFT JOIN `roomTypeList` rt
                    ON o.roomType_ID = rt.roomType_ID
      WHERE  rt.locale_ID = lang()
      UNION
      SELECT o.object_ID,
             rt.roomType_ID,
             rt.Name,
             rt.Name_Short
      FROM   `objectPreferredRoomType` o
             LEFT JOIN `roomTypeList` rt
                    ON o.roomType_ID = rt.roomType_ID
      WHERE  locale_ID = 'en'
         AND NOT o.roomType_ID IN
                 (SELECT rt.roomType_ID
                  FROM   `roomTypeList` rt
                  WHERE  rt.locale_ID = lang());
      und die lang Function:
      Code:
       DROP FUNCTION IF EXISTS `lang`;
      
      
      DELIMITER |
      CREATE FUNCTION `lang` ()
      RETURNS CHAR(2)
      LANGUAGE SQL
      DETERMINISTIC
      SQL SECURITY DEFINER
      BEGIN
        return @lang;
      END; |
      DELIMITER ;
      Kann mir jemand sagen wie ich den an sich simpeln Query in vb richtig absetzen kann?

      Danke!

      Comment


      • #4
        Wenn das so ist, dann hilft mein Tipp nicht sofort. Ich bin von so einer Abfrage ausgegangen:
        [HIGHLIGHT=vbnet]mySQLCommand.CommandText = "SELECT * FROM GetPreferredRoomType WHERE <spalte> = @lang;"[/HIGHLIGHT]
        "Simpel" ist nur die eigentliche Abfrage. Aber die Variable müsste in der VIEW als <spalte> enthalten sein, damit sie in der WHERE-Klausel angesprochen werden kann.

        Ich weiß jetzt nicht mehr, ob ich das bei dir oder einem anderen Nutzer in früheren Diskussionen angesprochen hatte. Da ich dort mit meinen Hinweisen nicht wirklich weiter helfen konnte, muss ich jetzt sicherheitshalber passen. Jürgen

        Comment

        Working...
        X