Ошибка при отправке нулевого значения в параметр хранимой процедуры DateTime - PullRequest
2 голосов
/ 01 ноября 2011

У меня есть параметр хранимой процедуры:

@ScmDate DateTime = NULL

Из C #, когда я передаю параметр, как показано ниже, выдается ошибка: Ошибка преобразования nvarchar в datetime.

if (txtWaitedDate.Text != "")
    cmdTwMainEntry.Parameters.AddWithValue("@scmDate", Convert.ToDateTime(txtWaitedDate.Text));

Несмотря на то, что значение этого параметра по умолчанию задано как NULL, но если указанное выше условие C # не выполняется, оно выдает ошибку.

Отредактировано:

Ошибка появляется только тогда, когда я оставляю TextBox пустым.

Ответы [ 6 ]

2 голосов
/ 01 ноября 2011

Просто убедитесь, что вы отправляете DbNull.Value, когда текстовое поле пусто.Это должно сработать, афаик.

1 голос
/ 01 ноября 2011

Я подозреваю, что ваш формат даты не тот, который ожидается от сервера sql, попробуйте преобразовать его с DateTime.TryParse и подходящим поставщиком формата для вашего экземпляра SQL Server.

Эта ошибка может произойти, например, когда одиниспользует формат мм / дд / гггг, а другой использует дд / мм / гггг.

РЕДАКТИРОВАТЬ

Изменение типа параметра вручную должно работать в любом случае.Попробуйте с этим кодом, должно работать:

    SqlParameter parameter = cmdTwMainEntry.Parameters.Add("@scmDate", System.Data.SqlDbType.DateTime);
        // Set the value.
        parameter.Value = (!string.IsNullOrEmpty(txtWaitedDate.Text)) ? Convert.ToDateTime(txtWaitedDate.Text) : System.DbNull.Value;
0 голосов
/ 01 ноября 2011

Если для параметра указано значение по умолчанию, то нет необходимости указывать значение для этого параметра при вызове хранимой процедуры.Например, если у вас есть:

@ScmDate DateTime = NULL

Тогда простое решение - просто игнорировать этот параметр , когда для этого параметра нет значения.

0 голосов
/ 01 ноября 2011

Установите точку останова до того, как ваш SQL выполнится в C #, и проверьте коллекцию параметров. Похоже, что @ScmDate подкрадывается к значению типа String.Empty.

0 голосов
/ 01 ноября 2011
if( DateTime.TryParse( txtWaitedDate.Text, out WaitedDate )
    Entry.Parameters.AddWithValue("@scmDate", WaitedDate );
else
    Entry.Parameters.AddWithValue("@scmDate", DBNull.Value );
0 голосов
/ 01 ноября 2011

Я думаю, что вы вводите неправильную дату (формат).Так что это значение не может быть преобразовано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...