DateTime als Date unter .net



  • Hallo,
    ich habe ein WindowsForms Programm mit .net /C# geschrieben, welches mittels typisiertem DataSet mit SQL Server 2014 kommuniziert. Im DataSet Designer von VisualStudio kann ich gespeicherte Prozeduren erstellen. Ich vermute die Abfrage erfolgt mit T-SQL. Leider finde ich keine hilfreichen Informationen bei Microsoft. Im Designer steht nur SQL.

    Ich möchte ein DateTime Feld als Date Feld abfragen.
    Mein Ansatz:

    SELECT      Datum
    FROM        Journal
    WHERE       (CAST(Datum AS DATE) = @Datum)
    

    Ich bekomme einen Laufzeitfehler mit der Meldung der Typ Date ist nicht bekannt.

    Laut meinen Recherchen kennt SQL "Date" bereits seit der Version 2008.
    Muss ich tatsächlich auf String casten?

    PS Ich könnte relativ leicht nur Date in die Datenbank schreiben, allerdings benötige ich an anderer Stelle auch die Uhrzeit. Dann müsste ich ein zweites Feld mit Date setzen, hätte dann aber eine Redundanz.

    Vielen Dank!



  • Ich verwende kein DataSet, daher kann ich direkt keine C#-Antwort liefern.

    Für ein C++ Programm nutzen wir inzwischen berechnete Felder im SQL Server, wenn wir regelmäßig nur Teilangaben brauchen. Sei es nun der Tagesanteil eines DateTime-Feldes oder (weil wir es so im Programm an einigen Stellen nutzen) den Minuten-Anteil als Integer vom Tagesbeginn an.

    Vielleicht ist aber auch die Verwendung von CAST ungeeignet und CONVERT dein Freund (z.B. "CONVERT(date, Datum)" in deinem Beispiel). Wenn du sehr häufig darauf zugreifst sind die berechneten Felder aber vermutlich besser (gerade in der persistenten Variante):

    ALTER TABLE [TblTest] \r\n"
    ADD [CALC_Tag] AS CONVERT(date, Beginn) PERSISTED 
    GO 
    ALTER TABLE [TblTest] \r\n"
    ADD [CALC_BeginnMinuten] AS DATEPART(minute,Beginn) + DATEPART(hour,Beginn) * 60 PERSISTED 
    GO
    


  • @asc: Danke für deinen Hinweis. Ich denke Date wäre schon der einfachste Ansatz.

    Ich habe das Problem übrigens gefunden. Ist mir irgendwie peinlich. Ich hatte vor der Installation vom SQL Management Studio 2014 noch die SQL Server 2005 auf dem Rechner. Meine Datenbank wurde somit auch unter 2005 angelegt. Ist mir seinerzeit gar nicht aufgefallen. Es wird ja die Version 9.irgendwas angezeigt und nicht 2005.

    Vielleicht kann mir jemand sagen wie ich die Datenbank migrieren kann. Es handelt sich um ca. 15 Tabellen mit ForeignKeys.



  • Datenbank sichern (Müsste im Management-Studio per Rechtsklick irgendwo zu finden sein) und auf einer neueren Instanz (z.B. 2014) rücksichern.

    Problem: Datenbanklogins werden nicht mitgesichert!



  • Hi,
    hat soweit funktioniert. Musste wie du bereits geschrieben hast die Benutzer sowie die Verbindungszeichenfolge entsprechend anpassen.
    Jetzt klappt auch:
    WHERE (CAST(Datum AS DATE) = @DATUM)

    Vielen Dank für deine Hilfe!


Log in to reply