“参数的数量不匹配存储过程值的数目” System.Data.Common.DbCommand细微差别

问题描述 投票:0回答:3

这可能是一个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中。

c# sql sql-server-2005 datareader
3个回答
3
投票

恕我直言,将CommandType应始终无论如何指定 - 明确性始终是最好含蓄。很明显,事情是在这两个环境不同的引擎盖下发生,但是当你明确的有关命令类型的代码按预期工作。

我能想到的唯一的事情 - 是数据库设置恰好NULL的治疗相同的 - 尤其?

编辑

可能需要检查SET ANSI_NULLS ON/OFFSET CONCAT_NULL_YIELDS_NULL ON / OFF - 你可以看看这两个数据库的性能,看看是否设置匹配。


1
投票

下面是一些故障排除提示我通常会尝试的。

  1. 检查DAL组件“数据库”对象类型驻留在装配版本。
  2. 检查库参考您的DAL - 无论你是从引用GAC或不是DLL - 我有过麻烦的DLL引用GAC,其中载有旧组件
  3. 检查你的默认数据库时,你的代码会尝试连接到UAT环境数据库 - 它可能取决于你如何连接到数据库中指向其他数据库。

而所有仍然没有得到很好的,干净和重建解决方案

边评论:白塞,我不认为“System.Data.IDataReader”是被包含在使用的技术;)


0
投票

您可以使用SQL事件探查器,看看是在SQL Server的角度发生。

理想的情况是让别人来捕获从生产的走线,以及使他们能够进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.