当我将DateTime参数传递给我的存储过程时,为什么会出现SQL异常?

时间:2012-01-10 11:18:49

标签: c# stored-procedures parameter-passing

这是存储过程的签名:

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:

我终于找到了错误,这是一个人为错误:(问题不在于这个参数哪个工作正常...抱歉没时间浪费了......

3 个答案:

答案 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参数值代替字符串。