Как Вы настраиваете SqlParameter
? Необходимо установить SqlDbType
свойство к [1 111] 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
структура легко сделает).
Все, что, будучи сказанным, если Вы выполняете преобразование и затем передаете преобразованную дату UTC (дата, которая получена путем вызова ToUniversalTime
метод , не путем преобразования в строку) к хранимой процедуре.
И когда Вы вернете значение, звоните ToLocalTime
метод для получения времени в зоне местного времени.
Вот то, как я добавляю параметры:
sprocCommand.Parameters.Add(New SqlParameter("@Date_Of_Birth",Data.SqlDbType.DateTime))
sprocCommand.Parameters("@Date_Of_Birth").Value = DOB
я принимаю, когда Вы выписываете DOB нет никаких кавычек.
Вы используете стороннее управление для получения даты? У меня были проблемы со способом, которым текстовое значение сгенерировано от некоторых из них.
Наконец, это работает, если Вы вводите в.Value атрибуте параметра, не ссылаясь на DOB?
Просто использование:
param.AddWithValue("@Date_Of_Birth",DOB);
, Который будет заботиться обо всех Ваших проблемах.
Если вы используете Microsoft.ApplicationBlocks.Data
, это вызовет вызов ваших спроков в одну строку
SqlHelper.ExecuteNonQuery(ConnectionString, "SprocName", DOB)
Да, и я думаю, что casperOne правильный ... если вы хотите обеспечить правильную дату и время в нескольких часовых поясах, тогда просто конвертируйте значение в UTC, прежде чем отправлять значение в SQL Server
SqlHelper.ExecuteNonQuery(ConnectionString, "SprocName", DOB.ToUniversalTime())