Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - sqlserver datum vergleichen


javax - Fr 12.06.09 16:59
Titel: sqlserver datum vergleichen
hallo
ich möchte per select einen datensatz bekommen, bei dem die gespeicherte zeit mit der übergebenen datetime übereinstimmt

das datum ist mit folgendem format in der DB: 2009-12-03 00:00:00.000 -->sample_shift_DATETIME
rufe ich jedoch dateTime[.ToString()] auf, bekomme ich folgendes format: 03.12.2009 00:00:00 -->shift.ShiftDate

wie muss ich die WHERE klausel formulieren?
momentan sieht sie so aus:

WHERE sample_shift_DATETIME = '" + shift.ShiftDate + "'


mfg


Kha - Fr 12.06.09 17:09

user profile iconjavax hat folgendes geschrieben Zum zitierten Posting springen:
das datum ist mit folgendem format in der DB: 2009-12-03 00:00:00.000 sample_shift_DATETIME
Hoffentlich nicht - viel eher doch als "date"-Wert, also formatunabhängig. Und genauso formatunabhängig kannst du das Datum in die Query einfügen, nämlich mit SQL-Parametern: http://openbook.galileocomputing.de/visual_csharp/visual_csharp_26_003.htm#mjaed852f5e366e95ecd103ddabd86eec1


javax - Fr 12.06.09 17:29

also kann ich ein DateTime in der Datenbank ohne weiteres mit einem DateTime meiner Software vergleichen?

habe es jetzt so gemacht, aber leider kommt dann folgender fehler wenn ich ExecuteReader ausführe:
--> Incorrect syntax near '.2009'.


JüTho - Fr 12.06.09 17:52

Wo ist bloß meine Glaskugel...

Zitat:
--> Incorrect syntax near '.2009'.

Wie lautet denn der zugehörige CommandText, wie wurde der DateTime-Wert an den Parameter übergeben?
Zitat:
also kann ich ein DateTime in der Datenbank ohne weiteres mit einem DateTime meiner Software vergleichen?

Natürlich; du musst lediglich berücksichtigen, dass ein DateTime-Wert sowohl im Programm als auch in der DB mit oder ohne Zeit stehen kann.

Jürgen


Kha - Fr 12.06.09 18:50

user profile iconjavax hat folgendes geschrieben Zum zitierten Posting springen:
--> Incorrect syntax near '.2009'.
Hört sich nicht gerade so an, als ob du jetzt Parameter verwenden würdest ;) ...

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
du musst lediglich berücksichtigen, dass ein DateTime-Wert sowohl im Programm als auch in der DB mit oder ohne Zeit stehen kann.
Bei System.DateTime hast du natürlich recht, bei der Übertragung wird der "Zeit"-Anteil aber abgeschnitten, zumindest bei date (2008+).


javax - Fr 12.06.09 22:14

vielen dank für eure antworten!

der datenbankteil wurde von einem anderen gemacht. bei diesem funtkioniert der code angeblich einwandfrei, aber wenn ich ihn teste um ihn ins projekt einzubinden, funktioniert diese methode nicht mehr.

hier ist der fehlerhafte teil der methode:
typen in der DB sind die selben wie im programm!
sample_shift_usr_id und shift.Responsible_user --> INT
sample_shift_DATETIME und shift.ShiftDate --> DATETIME


public List<Sample> GetSamples(Shift shift)
{
try
{
samples = new List<Sample>();
sc = new SqlConnection(conString);
scd = new SqlCommand("SELECT * FROM sample WHERE sample_shift_usr_id = " + shift.Responsible_user + " AND sample_shift_DATETIME = " + shift.ShiftDate, sc);
scd.Connection.Open();

SqlDataReader sdr = scd.ExecuteReader(); <-- Hier wird laut Debugger die Exception geworfen
while (sdr.Read())
{
....

zur weiteren info:
der andere benutzt VS 2005 PRO Deutsch und ich VS 2008 PRO English. vielleicht hindert die lokalen-einstellung daran, dass es unterschiedliche Datumsformate gibt?! (zumindest gibts in java eine "Locale" klasse um regionsspezifische ausgaben zu machen)

ps: gibts hier in diesem forum keinen codetag?


Kha - Fr 12.06.09 22:22

user profile iconjavax hat folgendes geschrieben Zum zitierten Posting springen:
vielen dank für eure antworten!
Sieht aber ehrlich gesagt nicht so aus, als ob du sie durchgelesen hättest, von Parametern jedenfalls keine Spur in deinem Code :nixweiss: . Klick doch bitte mal auf den geposteten Link...
user profile iconjavax hat folgendes geschrieben Zum zitierten Posting springen:
ps: gibts hier in diesem forum keinen codetag?
Probier's mal mit dem "+" neben der Combobox, in der "C#" stehen sollte ;) (Editor-Sektion "Bereiche").