【发布时间】:2012-02-06 19:32:45
【问题描述】:
这是存储过程的签名:
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 转换为日期时间时出错。”
命令参数的SqlValue为:“23jan12”
所以我认为是因为 SqlValue 日期中有字母字符。
1°/如何解决这个问题?
2°/我不知道为什么传递相同的参数类型对于某些类型是不安全的,而对于某些其他类型是安全的。
编辑:
report.TimeStamp 不是String 而是DateTime 类型变量
编辑 2:
我终于找到了一个人为错误的错误:(问题不在于这个参数正常工作......很抱歉浪费了你的时间......
【问题讨论】:
-
您的 report.timestamp 属性是什么数据类型?
-
您的
report.TimeStamp也应该是DateTime类型,而不是字符串。 -
解析字符串到日期或尝试 23-Jan-12。
-
存储过程也需要'@p_timestamp'而不是'@p_time_stamp'
-
发布更多 SP - 如果参数确实是
DateTime,则从VARCHAR字段到DateTime会发生某种转换。您是在与某处的VARCHAR字段进行比较吗?
标签: c# stored-procedures parameter-passing