如何解决“过程或函数指定的参数太多”异常?

时间:2017-01-11 04:21:50

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

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

  

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

我尝试通过互联网找到答案,但无法修复 这是我的一个存储过程的代码

                    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

2 个答案:

答案 0 :(得分:2)

您应该尝试调查

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

尝试指定命令类型:

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;

答案 1 :(得分:0)

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

更改此

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

到此

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