Почему у меня возникает исключение SQL при передаче параметра DateTime в мой сохраненный процесс? - PullRequest
0 голосов
/ 10 января 2012

Вот подпись хранимого процесса:

ALTER PROCEDURE [set_info]

    @idFile_id int,
    @p_timestamp datetime
...

В моем коде на C # есть объявление параметра:

           command.Parameters.Add(new SqlParameter("@p_time_stamp", SqlDbType.DateTime));
           command.Parameters["@p_time_stamp"].Value = report.TimeStamp;

Возникло исключение SQL: «Ошибкапреобразование типа данных nvarchar в datetime. "

SqlValue параметра команды:" 23jan12 "

Так что я думаю, это потому, что в дате SqlValue есть альфа-символы.

1 ° / Как решить эту проблему?

2 ° / Я не знаю, почему передача одного типа параметров небезопасна для некоторых типов и безопасна для некоторых других типов.

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

report.TimeStamp не является переменной типа String, а DateTime

EDIT 2:

Iнаконец-то нашел ошибку, которая была человеческой ошибкой :( проблема была не в этом параметре, который работал правильно ... Извините, что потерял ваше время ...

Ответы [ 3 ]

1 голос
/ 10 января 2012

Ваше имя параметра в коде не соответствует хранимой процедуре.Возможно, он пытается преобразовать пустую строку или что-то в этом роде в DateTime, поскольку никакое значение не будет передано ожидаемой переменной @p_timestamp;как вы указали @p_time_stamp в коде.

Изменения ниже отражают имя параметра, ожидаемое в вашей хранимой процедуре:

command.Parameters.Add(new SqlParameter("@p_timestamp", SqlDbType.DateTime));
command.Parameters["@p_timestamp"].Value = report.TimeStamp;
0 голосов
/ 10 января 2012
DateTime dt = MyDateFormatParse(report.TimeStamp);
command.Parameters["@p_time_stamp"].Value =  dt;

Использовать значение параметра DateTime вместо строки.

0 голосов
/ 10 января 2012

Предполагая, что ваш report.TimeStamp является строкой, почему бы просто не создать из нее объект DateTime и вместо этого передать его в хранимую процедуру?

...