次要更改后,参数计数与参数值计数不匹配

时间:2014-07-08 06:43:31

标签: c# sql

我改变了这个

的代码
public override IDataReader getData(int pageId, string pageName)
{
  try
  {
    return ((IDataReader)(SqlHelper.ExecuteReader(ConnectionStringConnectorPool, GetFullyQualifiedName("PageModuleGetAll"),pageId, pageName)));
  }
  catch (Exception ex)
  {
    ExceptionController.WriteExceptionToLog(string.Format("SqlDataProvider.cs/GetPageByIdAndName: pageId:{0}, pageName{1}", pageId, pageName), -2, ex);
    return null;
  }
}

到此

public override IDataReader getData(string sqlMethod, int pageId, string pageName)
{
  try
  {
    return ((IDataReader)(SqlHelper.ExecuteReader(ConnectionStringConnectorPool, GetFullyQualifiedName(sqlMethod),pageId, pageName)));
  }
  catch (Exception ex)
  {
    ExceptionController.WriteExceptionToLog(string.Format("SqlDataProvider.cs/GetPageByIdAndName: pageId:{0}, pageName{1}", pageId, pageName), -2, ex);
    return null;
  }
}

我正在调用这样的方法

public List<PageModuleInfo> GetAllPageModules(int pageId, string paneName)
    {
        try
        {
            return Common.Utilities.CBO.FillCollection<PageModuleInfo>(BLL.Data.DataProvider.Instance().getData("PageModuleGetAll", pageId, paneName));
        }
        catch (Exception ex)
        {
            ExceptionController.WriteExceptionToLog(new Exception("PageModuleController.cs/GetAllPageModules:" + System.Environment.NewLine + ex));
            return null;
        }
    }

现在我获取参数计数与参数值计数错误不匹配,我想知道原因。

2 个答案:

答案 0 :(得分:1)

该错误表示您正在使用存储过程,并且提供的参数值多于存储过程中声明的参数。

所以:检查3个存储过程中的每一个,并仔细检查每个参数的数量。如果其中一个人没有至少2个,那就是问题所在。特别是,还要检查相同存储过程的不同版本;例如,可能有dbo.PageModuleGetAlljohndev.PageModuleGetAll - 其中johndev.PageModuleGetAll是包含2个参数的更新版本。但是,如果您的应用程序使用不同的身份(集成安全性,专用的SQL帐户等)运行 - 那么它仍将运行dbo.PageModuleGetAll

答案 1 :(得分:0)

您的方法是对基类方法的重写,因此派生类函数签名可能与基类签名不匹配。

这会给你一个参数值计数错误&#39;因为基类的参数数量小于派生类。