为什么在将DateTime参数传递给存储过程时引发SQL异常
本文关键字:SQL 异常 存储过程 DateTime 参数传递 为什么 | 更新日期: 2023-09-27 18:19:49
这是存储过程的签名:
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
类型的变量
编辑2:
我终于发现了一个人为错误:(问题不在于这个参数是否正确工作…很抱歉耽误了你的时间…
代码中的参数名称与存储过程不匹配。它可能试图将一个空白字符串或类似的东西转换为DateTime,因为不会向预期的@p_timestamp
变量传递任何值;正如您在代码中指定的@p_time_stamp
。
以下更改反映了存储过程中预期的参数名称:
command.Parameters.Add(new SqlParameter("@p_timestamp", SqlDbType.DateTime));
command.Parameters["@p_timestamp"].Value = report.TimeStamp;
假设您的报告。TimeStamp是一个字符串,为什么不简单地从中创建一个DateTime对象并将其传递给存储过程呢?
DateTime dt = MyDateFormatParse(report.TimeStamp);
command.Parameters["@p_time_stamp"].Value = dt;
请使用DateTime参数值而不是字符串。