这是存储过程的签名:
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 Exception引发消息:“将数据类型nvarchar转换为datetime时出错。”
命令参数的SqlValue是:“23jan12”
所以我认为这是因为SqlValue日期中有字母字符。
1°/如何解决这个问题?
2°/我不知道为什么传递相同的参数类型对某些类型不安全,对某些其他类型也是安全的。
编辑:
report.TimeStamp不是String
,而是DateTime
类型变量
编辑2:
我终于找到了错误,这是一个人为错误:(问题不在于这个参数哪个工作正常...抱歉没时间浪费了......
答案 0 :(得分:1)
代码中的参数名称与存储过程不匹配。它可能试图将空字符串或类似的东西转换为DateTime,因为没有值会传递给预期的@p_timestamp
变量;因为你在代码中指定了@p_time_stamp
。
以下更改反映了您的存储过程中预期的参数名称:
command.Parameters.Add(new SqlParameter("@p_timestamp", SqlDbType.DateTime));
command.Parameters["@p_timestamp"].Value = report.TimeStamp;
答案 1 :(得分:0)
假设您的report.TimeStamp是一个字符串,为什么不简单地从它创建一个DateTime对象并将其传递给存储过程呢?
答案 2 :(得分:0)
DateTime dt = MyDateFormatParse(report.TimeStamp);
command.Parameters["@p_time_stamp"].Value = dt;
使用DateTime参数值代替字符串。