带有datetime参数问题的ADO.NET Update命令

时间:2010-02-03 23:55:02

标签: datetime ado.net parameters

我正在尝试使用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 :(得分:0)

当然这会在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);

答案 1 :(得分:0)

您是否必须针对基类进行编程,还是可以使用SqlParameter? (假设您使用的是连接到Sql Server)也许您可以尝试设置SqlDbType属性

SqlParameter sqlParam = (SqlParameter)nm8; //check if it's compatible before casting.
sqlParam.SqlDbType = SqlDbType.DateTime