Announcement

Collapse
No announcement yet.

SQL Abfrage

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

  • SQL Abfrage

    Hallo!
    so ich weiß nicht ob ich in diesem Forum richtig bin, aber ich poste einfach mal.
    also ich haben folgenden ODBC-Adapter ;

    Code:
          OdbcDataAdapter myAdapter = new OdbcDataAdapter(
              "SELECT " + database_query + " FROM substitution WEHRE " +
              "( date = " + actual_day + " AND lesson >= " + beginn_lesson + " AND lesson <= " + end_lesson + ")" +
              "AND ( date > " + actual_day + " AND date <= " + End_Date + ")" + 
              "AND class is not null " +
              " ORDER BY " + primary_order + "," + secondary_order + ", lesson " +
              " LIMIT " + offset + ", " + limit, myConnection);
    Nur bekomme ich immer einen Error. Dieser lautet wie folgt:
    ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-5.0.41-community-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( date = 20080724 AND lesson >= 5 AND lesson <= 16)AND ( date > 20080724 AND dat' at line 1

    Und ich weiß nicht was schuld ist. Kann mir jemand sagen, was ich bei diesem Query falsch mache?
    lg nesa
    Zuletzt editiert von nesa; 24.07.2008, 21:10.

  • #2
    "WEHRE" schreibt man "WHERE"

    Comment


    • #3
      ... und DATE ist "mit an Sicherheit grenzender Wahrscheinlichkeit" kein numerischer Wert der Form 20080724.

      Das zeigt, dass Dein Vorgehen in mehrerlei Hinsicht nicht vernünftig ist.

      1. Benutze möglichst niemals Odbc oder Oledb. Immer dann, wenn es einen speziellen DbProvider gibt, ist dieser unbedingt vorzuziehen, weil er für die betreffende Datenbank optimiert wurde. Für MySql (und eigentlich alle anderen Datenbanken) findet man passende DbProvider und Hinweise zur Verbindung über ConnectionStrings.

      2. Es ist zumindest äußerst fehleranfällig (wie Du gemerkt hast), einen Sql-Befehl auf diese Weise als langen String zu erstellen. Probleme sind solche Werte-Konvertierungen, die fehlenden Gänsefüßchen und SQL-Injection. Gewöhne Dir unbedingt die Verwendung von Parametern an:
      Code:
      MySqlCommand cmd = new MySqlCommand("
         SELECT " + database_query 
          + " FROM substitution "
          + "WHERE ( date = @actual_day AND lesson >= @begin_lesson "
          + "   AND lesson <= @end_lesson )" 
          + " ORDER BY " + primary_order + "," + secondary_order + ", lesson " +
                " LIMIT " + offset + ", " + limit,");
      cmd.Parameters.AddWithValue("@actual_day", actual_day);
      cmd.Parameters.AddWithValue("@begin_lesson", begin_lesson);
      cmd.Parameters.AddWithValue("@end_lesson", end_lesson);
      Nähere Erläuterungen sind in der SDK-Doku/MSDN unter SqlParameter zu finden. Ob auch die Order- und Limit-Werte als Parameter übergeben werden können, musst Du selbst prüfen. Ebenfalls ist es denkbar, dass der MySqlProvider nicht mit '@', sondern mit '?' oder ':' arbeitet.

      Viel Erfolg! Jürgen

      PS. Das Forum ADO.NET ist besser; das ist für die Arbeit mit Datenbanken gedacht.

      Comment

      Working...
      X