我正在尝试使用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以该格式转换日期时间? 如何在不将值作为字符串传递的情况下解决问题。
非常感谢。
答案 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