Используя DateTime в SqlParameter для Хранимой процедуры, ошибки формата

23
задан casperOne 6 November 2011 в 14:45
поделиться

4 ответа

Как Вы настраиваете 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 метод для получения времени в зоне местного времени.

29
ответ дан casperOne 29 November 2019 в 02:31
поделиться

Вот то, как я добавляю параметры:

sprocCommand.Parameters.Add(New SqlParameter("@Date_Of_Birth",Data.SqlDbType.DateTime))
sprocCommand.Parameters("@Date_Of_Birth").Value = DOB

я принимаю, когда Вы выписываете DOB нет никаких кавычек.

Вы используете стороннее управление для получения даты? У меня были проблемы со способом, которым текстовое значение сгенерировано от некоторых из них.

Наконец, это работает, если Вы вводите в.Value атрибуте параметра, не ссылаясь на DOB?

3
ответ дан K Richard 29 November 2019 в 02:31
поделиться

Просто использование:

 param.AddWithValue("@Date_Of_Birth",DOB);

, Который будет заботиться обо всех Ваших проблемах.

0
ответ дан BFree 29 November 2019 в 02:31
поделиться

Если вы используете Microsoft.ApplicationBlocks.Data, это вызовет вызов ваших спроков в одну строку

SqlHelper.ExecuteNonQuery(ConnectionString, "SprocName", DOB)

Да, и я думаю, что casperOne правильный ... если вы хотите обеспечить правильную дату и время в нескольких часовых поясах, тогда просто конвертируйте значение в UTC, прежде чем отправлять значение в SQL Server

SqlHelper.ExecuteNonQuery(ConnectionString, "SprocName", DOB.ToUniversalTime())
0
ответ дан BoltClock 29 November 2019 в 02:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: