Jag har en sp i sql server som skall ta emot ett datum i en inparameter. Kolumnen i tabellen som jag vill selektera på är en DateTime. Jag använder SqlParametrar på Commend-objektet (System.Data.SqlClient.SqlParameter). I sp:n är inparametern satt till DateTime. Hej! regDate ser ut som t ex "2005-08-27", så det borde vara rätt. Då kan du testa med datumformatet UNSEPARATED: Du behöver inte lägga på klockslag när du parsar strängen till DateTime.Vilken datatyp skall jag använda mot SQL Server
System.Data.SqlClient.SqlParameter regDatePar = new System.Data.SqlClient.SqlParameter();
regDatePar.ParameterName = "@regDate";
regDatePar.SqlDbType = SqlDbType.DateTime;
regDatePar.Direction = ParameterDirection.Input;
regDatePar.Value = DateTime.Parse(regDate + " 00:00:00");
Problemet är att vilken datatyp jag än sätter datum parametern till så får jag felmeddelanden, vid anrop till sp:n.
".Net SqlClient Data Provider: Syntax error converting datetime from character string."
Provar jag istället att köra varchar i både sp och c#-kod blir felmeddelandet istället:
"The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."
Vad göra!?Sv: Vilken datatyp skall jag använda mot SQL Server
Datumet ska formateras som följande (som textsträng alltså), "2005-08-27 23:34:10".
Om du bara har datumet, lägger du till mellanslag följt av "00:00:00" sist i strängen.
Har du bara tiden lägger du till "1900-01-01" följt av ett mellanslag först i strängen.
//HåkanSv:Vilken datatyp skall jag använda mot SQL Server
Eftersom jag inte får det att funka har jag nu tagit bort datumparametern och gör en filtrering av datasetet som fått data från sp:n. Den lösningen funkar utmärkt, fast det är irriterande att inte få datumparametern att funka!
/henrikSv: Vilken datatyp skall jag använda mot SQL Server
'20050827' istället. Det funkar så gott som alltid. Då räcker det dessutom med den strängen (8 tecken).
/mickeSv: Vilken datatyp skall jag använda mot SQL Server
Ifall du har några problem med att parsa datumet, använd en svensk CultureInfo. Den svenska standarden följer ISO 8601.
regDatePar.Value = DateTime.Parse(regDate, new CultureInfo(1053));