SQL-Oracle - Problem mit <-Zeichen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    SQL-Oracle - Problem mit <-Zeichen

    Moin!

    ich habe eine Funktion bei der ein SQL abgefragt werden soll in welchem ein "<" enthalten ist.

    Mein SQL-String ist:

    select * from VBEBL_BS_F_UNTERLAGEN WHERE SEIT < '08.06.2023 00:00:00' ORDER BY LFDNR ASC


    an folgender Stelle:

    VB.NET-Quellcode

    1. Dim MyDataAdapter As New Autodesk.Map.IM.Data.Provider.DataAdapter(SQL, Me.Document.Connection)
    2. Dim Datentabelle As New DataTable
    3. MyDataAdapter.Fill(Datentabelle)



    Dann kommt aber die Fehlermeldung, dass ungültige Zeichen kommen und der SQL wie folgt aussieht:

    ORA-00920: Ungültiger relationaler Operator
    'select * from VBEBL_BS_F_UNTERLAGEN WHERE SEIT &amp;lt; '08.06.2023 00:00:00' ORDER BY LFDNR ASC' --->

    Das Problem ist, dass aus dem "<" ein "&lt;" wird.

    Kann mir jemand weiterhelfen?

    Gruß Jan

    jan99 schrieb:

    Das Problem ist, dass aus dem "<" ein "&lt;" wird.
    Im XML-Kommentar über Properties und Prozeduren im .NET-Quelltext wird ein "<" als "&lt;" und ein ">" ein "&gt;" dargestellt.
    Wird da irgend ein SQL-Text bei Dir als Kommentar verstanden?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich glaube das Problem liegt im Datumsformat, wenn ich sowas gegen Oracle abschieße meldet der mir Fehler bezüglich des Datums.
    Das hier geht hingegen, aber sicherlich ist das auch nicht, wie man es richtig macht:
    select * from VBEBL_BS_F_UNTERLAGEN WHERE SEIT < '08.06.2023' ORDER BY LFDNR ASC

    So macht man es offenbar richtig in Oracle:

    SQL-Abfrage

    1. select * from VBEBL_BS_F_UNTERLAGEN WHERE SEIT < TO_DATE('08.06.2023 00:00:00','DD.MM.YYYY HH24:MI:SS') ORDER BY LFDNR ASC

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    erstmal: wenn die Fehlermeldung aus < ein &lt; macht ist das ja nicht der Fehler der gemeldet wird, sondern nur ein unbedeutender Fehler in der Darstellung der Fehlermeldung.
    Sie bleibt ja dennoch gut lesbar.
    Lesbar ja, aber zum Verständnis müsste man wissen, was in Oracle mit "relationaler Operator" gemeint ist. Und dann ist immer noch Rätselraten, welcher der relationalen Operatoren gemeint ist - kann gut sein, dass mehrere vorhanden sind.
    (Und dann kann die Fehlermeldung immer noch komplett falsch liegen - Sql-Fehlermeldungen sind meist minderer Qualität vergilchen mit dem, was ein .Net-Compiler zu erzeugen imstande ist)

    Wichtiger Hinweis: Doku lesen!!
    Scheinbar hat hdzn iwas sachkundiges konsultieren können, aber wohl nicht die amtliche Doku.
    Ich gehe auch davon aus, dass es mehrere Arten gibt, Zeiten in Oracle-Sql zu notieren, auch einfacherere.

    Genauso wichtiger Hinweis: DbParameter verwenden!!
    Dann bist du den Heckmeck mit den vielen möglichen Datum-Notierungen los, und hast eine einheitliche Vorgehensweise auch für alle anderen Datentypen.

    Und Sql-Injection ist ein Riegel vorgeschoben - ich sags gelegentlich: Eigentlich ists kriminell, wenn man DbParameter nicht verwendet.
    Ich weiß Datümmer in Oracle sind sone Sache verglichen zu anderen DBs. Extrawurst und so, aber genau weiß ich es auch nicht.

    Infos zu Oracle Date-Formaten gibts auch hier, also so Geschichten wie Minuten ist da MI anders als .net zum Beispiel mm, weil Oracle keine Groß- und Kleinschreibung kennt.