例外情况”;过程或函数需要参数,但未提供该参数";即使在提供参数后也抛出

本文关键字:参数 quot 过程 情况 函数 | 更新日期: 2023-09-27 17:54:39

我正在尝试使用C#方法调用的存储过程在数据库中插入一些条目,如下所示:

public int addProfile(UserProfile NewUserPro)
{
    DataSet ds = ExecuteStoredProcedure("AddNewPro", new SqlParameter[]{
                new SqlParameter("@UserID", NewUserPro.UsrId),
                new SqlParameter("@Type", NewUserPro.Type),
                new SqlParameter("@Phone", NewUserPro.Phone),
                new SqlParameter("@Name", NewUserPro.Name),
                new SqlParameter("@FatherName", NewUserPro.FatherName),
                new SqlParameter("@GroupID", NewUserPro.GroupID),
                new SqlParameter("@IsPublic", 0)});
            return int.Parse(ds.Tables[0].Rows[0][0].ToString());
}

ExecuteStoredProcedure()是我创建的一个C#方法。它执行指定的存储过程,并以DataSet的形式返回输出。这就是该函数的定义:

public DataSet ExecuteStoredProcedure(string ProcedureName, SqlParameter[] Parameters)
{
    try
    {
         using (SqlCommand com = new SqlCommand("[dbo]." + ProcedureName))
         {
              com.CommandType = CommandType.StoredProcedure;
              foreach (SqlParameter sp in Parameters)
                   com.Parameters.Add(sp);
              return SelectDataSet(com);
         }
    }
    catch (Exception e)
    {
        throw e;
    }
}   

正如您在addProfile()方法中看到的,我已经提供了@IsPublic参数,但它仍然抛出以下异常:

过程或函数"AddNewPro"需要参数"@IsPublic",没有提供。

@IsPublic参数是将值保存到[IsPublic]字段的int参数,该字段是允许null的表中的int字段。

更新1

我正在包括存储过程的输入参数。我认为这就足够了?如果你愿意,我可以包括完整的存储过程,但这是一个很长的代码,由于一些保密原因,我不得不删掉一些行。

ALTER PROCEDURE [dbo].[AddNewPro]
    @UserID int,
    @Name NVARCHAR(MAX),
    @Type int,
    @Phone VARCHAR(MAX),
    @GroupID int,
    @FatherName VARCHAR(MAX),
    @IsPublic int
AS

更新2

好的,我找到了一个解决方案的小提示。当我把断点放在ExecuteStoredProcedure的第一行时,我发现它将@IsPublic的值设置为null。但我在添加参数时提供了值。为什么会发生这种情况?

例外情况”;过程或函数需要参数,但未提供该参数";即使在提供参数后也抛出

sqlparameter将零作为对象读取。

小心使用零,阅读这篇文章链接

必须先将零转换为整型。您的代码应该是这样的。

new SqlParameter("@IsPublic", Convert.ToInt32(0));
相关文章: