Hvordan opsætter du SqlParameter
? Du bør indstille SqlDbType
egenskab til SqlDbType.DateTime
og send derefter DateTime
direkte til parameteren (konverter IKKE til en streng, du spørger da om en masse problemer).
Du burde være i stand til at få værdien ind i DB'en. Hvis ikke, er her et meget simpelt eksempel på, hvordan man gør det:
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();
}
}
}
Jeg tror, at en del af problemet her er, at du er bekymret for, at det faktum, at tiden er i UTC, ikke bliver overført til SQL Server. Til det formål bør du ikke, fordi SQL Server ikke ved, at et bestemt tidspunkt er i en bestemt lokalitet/tidszone.
Hvis du vil gemme UTC-værdien, skal du konvertere den til UTC, før du sender den til SQL Server (medmindre din server har samme tidszone som klientkoden, der genererer DateTime
, og selv da er det en risiko, IMO). SQL Server gemmer denne værdi, og når du får den tilbage, hvis du vil vise den i lokal tid, skal du gøre det selv (hvilket er DateTime
struct vil nemt gøre).
Alt dette er sagt, hvis du udfører konverteringen og derefter passerer den konverterede UTC-dato (datoen, der opnås ved at kalde ToUniversalTime
metode, ikke ved at konvertere til en streng) til den lagrede procedure.
Og når du får værdien tilbage, ring til ToLocalTime
metode til at få tiden i den lokale tidszone.