Как настройвате SqlParameter
? Трябва да зададете SqlDbType
свойство на SqlDbType.DateTime
и след това предайте DateTime
директно към параметъра (НЕ преобразувайте в низ, тогава питате за куп проблеми).
Трябва да можете да получите стойността в DB. Ако не, ето един много прост пример как да го направите:
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();
}
}
}
Мисля, че част от проблема тук е, че се притеснявате, че фактът, че времето е в UTC, не се предава на SQL Server. За тази цел не трябва, защото SQL Server не знае, че определено време е в определен локал/часова зона.
Ако искате да съхраните UTC стойността, след това я преобразувайте в UTC, преди да я предадете на SQL Server (освен ако вашият сървър има същата часова зона като клиентския код, генериращ DateTime
и дори тогава това е риск, IMO). SQL Server ще съхрани тази стойност и когато я получите обратно, ако искате да я покажете в местно време, трябва да го направите сами (което DateTime
struct лесно ще направи).
Всичко това се казва, ако извършите преобразуването и след това предадете преобразуваната UTC дата (датата, която се получава чрез извикване на ToUniversalTime
метод, а не чрез преобразуване в низ) към съхранената процедура.
И когато получите обратно стойността, извикайте ToLocalTime
метод за получаване на часа в местната часова зона.