这可能是一个SQL Server数据库的设置问题,但我不知道从哪里开始寻找。
我有一个存储过程:
CREATE PROCEDURE aStoredProcedure
@dteSince DATETIME = null
AS
...
C#代码来调用存储过程:
using (IDataReader dr = database.ExecuteReader("aStoredProcedure"))
{
...
C#代码工作正常的生产环境。在此,因为它是不作为输入参数提供dteSince将被设置为空。
问题是,当我在UAT环境中运行这个,它会返回在标题所示的消息 - 错误的参数数量...
我可以通过代码更改为解决这个问题:
using (IDataReader dr = database.ExecuteReader (CommandType.StoredProcedure, "aStoredProcedure"))
{
...
此修复程序只是掩盖了真正的问题,因为在代码怎能失败的一个环境和另一个工作正常。
我已经删除并重新创建存储过程,没有运气。
技术用C#2.0和SQL Server 2005中。
恕我直言,将CommandType应始终无论如何指定 - 明确性始终是最好含蓄。很明显,事情是在这两个环境不同的引擎盖下发生,但是当你明确的有关命令类型的代码按预期工作。
我能想到的唯一的事情 - 是数据库设置恰好NULL的治疗相同的 - 尤其?
编辑
可能需要检查SET ANSI_NULLS ON/OFF
和SET CONCAT_NULL_YIELDS_NULL
ON / OFF - 你可以看看这两个数据库的性能,看看是否设置匹配。
下面是一些故障排除提示我通常会尝试的。
而所有仍然没有得到很好的,干净和重建解决方案
边评论:白塞,我不认为“System.Data.IDataReader”是被包含在使用的技术;)
您可以使用SQL事件探查器,看看是在SQL Server的角度发生。
理想的情况是让别人来捕获从生产的走线,以及使他们能够进行比较。