Hoe stel je de SqlParameter
in? ? U moet het SqlDbType
. instellen eigenschap naar SqlDbType.DateTime
en geef dan de DateTime
. door direct naar de parameter (niet converteren naar een string, dan vraag je om een heleboel problemen).
U zou de waarde in de DB moeten kunnen krijgen. Zo niet, dan is hier een heel eenvoudig voorbeeld van hoe u dit moet doen:
static void Main(string[] args)
{
// Create the connection.
using (SqlConnection connection = new SqlConnection(@"Data Source=..."))
{
// Open the connection.
connection.Open();
// Create the command.
using (SqlCommand command = new SqlCommand("xsp_Test", connection))
{
// Set the command type.
command.CommandType = System.Data.CommandType.StoredProcedure;
// Add the parameter.
SqlParameter parameter = command.Parameters.Add("@dt",
System.Data.SqlDbType.DateTime);
// Set the value.
parameter.Value = DateTime.Now;
// Make the call.
command.ExecuteNonQuery();
}
}
}
Ik denk dat een deel van het probleem hier is dat u zich zorgen maakt dat het feit dat de tijd in UTC is, niet wordt doorgegeven aan SQL Server. Dat zou u niet moeten doen, omdat SQL Server niet weet dat een bepaalde tijd zich in een bepaalde landinstelling/tijdzone bevindt.
Als u de UTC-waarde wilt opslaan, converteert u deze naar UTC voordat u deze doorgeeft aan SQL Server (tenzij uw server dezelfde tijdzone heeft als de clientcode die de DateTime
genereert) , en zelfs dan is dat een risico, IMO). SQL Server slaat deze waarde op en wanneer u deze terugkrijgt, als u deze in lokale tijd wilt weergeven, moet u dit zelf doen (wat de DateTime
struc zal gemakkelijk doen).
Dat gezegd hebbende, als u de conversie uitvoert en vervolgens de geconverteerde UTC-datum doorgeeft (de datum die wordt verkregen door de ToUniversalTime
methode, niet door te converteren naar een string) naar de opgeslagen procedure.
En wanneer u de waarde terugkrijgt, belt u de ToLocalTime
methode om de tijd in de lokale tijdzone te krijgen.