【问题标题】:How to solve "Procedure or function has too many arguments specified" exception?如何解决“过程或函数指定的参数过多”异常?
【发布时间】:2017-05-25 18:12:18
【问题描述】:

我有几个用于更新不同表的存储过程。当我执行它们时,我得到如下异常

过程或函数指定的参数太多

我尝试了在互联网上找到的答案,但无法解决。
这是我的一个存储过程的代码

cmd.CommandText = "update_HS_HR_EMP_BANK_AADM";
cmd.Parameters.Add("@appNo", SqlDbType.VarChar).Value = appNo;
cmd.Parameters.Add("@BRANCH_CODE", SqlDbType.VarChar).Value = branch;
cmd.Parameters.Add("@ACCOUNTNO", SqlDbType.VarChar).Value = account;
cmd.Parameters.Add("@ACCOUNT_TYPE", SqlDbType.VarChar).Value = type;
cmd.ExecuteNonQuery();
cmd.Parameters.Clear(); 

这是我的存储过程

    ALTER PROCEDURE [dbo].[update_HS_HR_EMP_BANK_AADM] 
        @appNo int,
        @BRANCH_CODE VARCHAR(10),
        @ACCOUNTNO VARCHAR(50),
        @ACCOUNT_TYPE VARCHAR(1)        

    AS
    BEGIN

        Update [HS_HR_EMP_BANK_AADM]
        SET
            [BBRANCH_CODE]=@BRANCH_CODE
            ,[EBANK_ACC_NO]=@ACCOUNTNO
            ,[EBANK_ACC_TYPE_FLG]=@ACCOUNT_TYPE
            ,[EBANK_ACTIVE_FLAG]=1
            ,[LAST_MODIFIED_DATE]=GETDATE()
        Where App_no=@appNo
    END

【问题讨论】:

  • 在添加参数之前调用这个cmd.Parameters.Clear();,并尝试删除重新创建过程。

标签: c# asp.net sql-server stored-procedures


【解决方案1】:

您应该尝试调查一些事情

检查连接字符串以检查它是否访问了正确的数据库

尝试指定命令类型:

cmd.CommandType = System.Data.CommandType.StoredProcedure;

并将您为 appNo 传入的参数类型从 Varchar 更改为 Int。

cmd.Parameters.Add("@appNo", SqlDbType.VarChar).Value = appNo;

根据存储过程,它应该是 int。

cmd.Parameters.Add("@appNo", SqlDbType.Int).Value = appNo;

【讨论】:

  • 值得注意的事情,但指定的错误不是因为这个
  • @Ash 我可以看到没有错误。我将 varchar 更改为 int
【解决方案2】:

您的传递参数类型不匹配。 @appNo 添加为varchar 但在过程中是int

改一下

cmd.Parameters.Add("@appNo", SqlDbType.VarChar).Value = appNo;

到这里

cmd.Parameters.Add("@appNo", SqlDbType.Int).Value = appNo;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2014-02-08
    相关资源
    最近更新 更多