Команда обновления ADO.NET с параметром datetime - PullRequest
1 голос
/ 04 февраля 2010

Я пытаюсь выполнить обновление базы данных с помощью хранимой процедуры с использованием ADO.NET.

По сути, я настраиваю все параметры и команды и задаю один из параметров, как показано ниже

DbParameter nm8 = provider.CreateParameter();
nm8.ParameterName = "@EDITDATE";
nm8.DbType = System.Data.DbType.DateTime;
nm8.Value = aObject.ADateTime;
command.Parameters.Add(nm8);

В хранимой процедуре входной параметр определен как

@EDITDATE       datetime = null,

, и в основном то, что делает хранимый процесс, просто получает запись и обновляет ее с переданной EDITDATE.

, ноя получаю эту ошибку

Ошибка преобразования типа данных varchar в datetime.

и я обнаружил, что значение datetime передается в хранимую процедуру как-то так:следующее

2010-02-03 15:26:54.3100000

вместо

2010-02-03 15:26:54.310

, и я думаю, что именно это вызывает ошибку приведения.

, поэтому мой вопрос заключается в том, почему ado.net конвертирует дату и времяв этом формате?как я могу решить проблему, не передавая значение в виде строки.

спасибо большое.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2010

Вам нужно программировать на базовый класс или вы можете использовать SqlParameter? (при условии, что вы используете подключение к Sql Server) Возможно, вы можете попробовать установить свойство SqlDbType

SqlParameter sqlParam = (SqlParameter)nm8; //check if it's compatible before casting.
sqlParam.SqlDbType = SqlDbType.DateTime
0 голосов
/ 04 февраля 2010

Конечно, это приводит к ошибке в SQL Server 2005:

print cast('2010-02-03 15:26:54.3100000' as datetime)

тогда как это прекрасно работает:

print cast('2010-02-03 15:26:54.31' as datetime)

Но ... aObject.ADateTime не относится к типу DateTime? Похоже, что он передается в хранимую процедуру в виде строки.

Если это действительно строка, я бы предложил преобразовать ее в DateTime до того, как вы передадите ее:

nm8.Value = DateTime.Parse(aObject.ADateTime);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...