这可能是一个SQL Server数据库设置问题,但我不确定从哪里开始查找。
我有一个存储过程:
CREATE PROCEDURE aStoredProcedure
@dteSince DATETIME = null
AS
...
调用存储过程的C#代码是:
using (IDataReader dr = database.ExecuteReader("aStoredProcedure"))
{
...
C#代码在生产环境中正常运行。在这里, dteSince 将设置为null,因为它不作为输入参数提供。
问题是当我在 UAT 环境中运行它时,它会返回标题中显示的消息 - 错误的参数数量...
我可以通过将代码更改为:
来解决此问题using (IDataReader dr = database.ExecuteReader (CommandType.StoredProcedure, "aStoredProcedure"))
{
...
修复只是掩盖了一个真正的问题,即代码如何在一个环境中失败并在另一个环境中正常工作。
我已经删除并重新创建了存储过程,没有运气。
技术使用C#2.0& Sql Server 2005。
答案 0 :(得分:3)
IMHO始终应该指定CommandType - 显式性总是优于隐式。很明显,在两种环境下都会发生一些不同的事情,但是当您明确了解命令类型时,代码会按预期工作。
我唯一能想到的是 - 数据库设置完全相同 - 特别是在处理NULL时?
修改强>
值得检查SET ANSI_NULLS ON/OFF
和SET CONCAT_NULL_YIELDS_NULL
ON / OFF - 您可以查看两个数据库的属性,看看设置是否匹配。
答案 1 :(得分:1)
以下是我经常尝试的一些故障排除提示。
所有仍然不太好,干净且重新构建解决方案
侧评:嗯,我不认为“System.Data.IDataReader”将被包含在所使用的技术中;)
答案 2 :(得分:0)
您可以使用SQL事件探查器查看SQL Server透视图上发生的情况。
理想情况下,让某人从生产中捕获痕迹,以便对其进行比较。