Where Klausel im Datumformat erzeugt Fehler

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Where Klausel im Datumformat erzeugt Fehler

    Hallo Gemeinde,

    ich habe folgendes Problem:

    Wenn ich die Where Klausel

    VB.NET-Quellcode

    1. Where CLHDates_Datum = " & clbh_Dates_Datum(a)

    anwende erhalte ich den Fehler:
    System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>msdn.microsoft.com/TraceCodes/…ility/Exception/Unhandled</TraceIdentifier><Description>Unbehandelte Ausnahme</Description><AppDomain>CMS_OMC.exe</AppDomain><Exception><ExceptionType>System.Data.SqlServerCe.SqlCeException, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91</ExceptionType><Message>Fehler beim Analysieren der Abfrage. [ Token line number = 1,Token line offset = 57,Token in error = .10 ]</Message><StackTrace> bei System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()

    Der Inhalt der Variablen

    VB.NET-Quellcode

    1. Public clbh_Dates_Datum(600) As DateTime
    2. clbh_Dates_Datum(day_Count) = reader("CLHDates_Datum").ToString

    ist: 12.10.2011
    Der Wert in der Datenbank ist:
    12.10.2011 00:00:00

    Daher meine Fragen:
    a) Warum wird nicht der gesamte Wert in die Variable übernommen?
    b) Warum erfolgt die Fehlermeldung?

    Danke schonmal im Voraus für eure Unterstützung.

    Lothar
    a) Soweit ich weiß ist ein Datum welches als Uhrzeit 00:00:00 hat das Gleiche wie dd.mm.yyyy (ohne der Uhrzeit)
    Kannst aber testen indem du die Uhrzeit mal veränderst und dir dann die Variable ansiehst (ansonsten Datum anders formatieren)
    b) Ein Datum wird in einer Where Klausel immer unter Hochkomma (') geschrieben

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    Datum in Hochkomma ergibt ebenfalls einen Fehler

    Hallo,

    wenn ich das Datum in Hochkomma setze erscheint die Fehlermeldung:

    Der Datentyp ist für die boolesche Operation ungültig. [ Data type (if known) = datetime,Data type (if known) = nvarchar ]

    Lothar

    miamiomc schrieb:

    Wenn ich die Where Klausel

    VB.NET-Quellcode

    1. Where CLHDates_Datum = " & clbh_Dates_Datum(a)

    anwende erhalte ich den Fehler...
    Unter anderem wegen sowas sind DBCommandParameter erfunden worden.
    Da hat man im CommandText einen PlaceHolder, der den Parameter spezifiziert, und in der Parameters-Auflistung sind dann die Parameter, inklusive der Werte.

    Access-Syntax wäre:

    VB.NET-Quellcode

    1. myCommand.CommandText = "Blabla... Where CLHDates_Datum = ?"
    2. myCommand.Parameters.AddWithValue(clbh_Dates_Datum(a))
    und KonvertierungsProbleme sind gelöst dadurch, dass garkeine Konvertierung stattzufinden braucht.

    Das Einfrickeln von Werten in DB-Abfragen ist eine Unsitte, die man sich besser erst gar nicht angewöhnt, denn neben KonvertierungsProblemen können auch Sicherheitslücken entstehen - Stichwort "SqlInjection".