更新时出错.. System.Data.SqlClient.SqlException: 过程或函数指定的参数太多

Error occured while updating.. System.Data.SqlClient.SqlException: Procedure or function has too many arguments specified

在我的项目中,我试图将 XML 个口袋从一个 table 解析为多个 tables,使用这些 tables 我将在前端 UI。启动 Windows 服务后,XML 口袋已从一个 table 解析为多个 table,但其中一个存储过程失败。在日志文件中,我收到此消息 “更新 IVR 呼叫数据的状态时发生错误 System.Data.SqlClient.SqlException: 过程或函数 PROC_UPDATE_IVR_CALLDATA_STATUS 指定的参数太多。"

我的存储过程PROC_UPDATE_IVR_CALLDATA_STATUS:

ALTER PROCEDURE [dbo].[PROC_UPDATE_IVR_CALLDATA_STATUS]
(
    @i_CallID               VARCHAR(50),    
    @i_AppID        VARCHAR(24),    
    @i_CallData             XML,
    @i_Status               CHAR(1),
    @i_ProcessStatus        VARCHAR(25),    
    @o_ErrorCode            int OUTPUT,
    @o_ErrorDescription     VARCHAR(200) OUTPUT
)
AS
BEGIN
    BEGIN TRY
        SET @o_ErrorCode=0
        SET @o_ErrorDescription='SUCCESS'

        IF Exists(SELECT CallID from TBL_CALLDATA_MASTER_BACKUP D               
                  Where D.CallID = @i_CallID 
                 )
        BEGIN         
                  UPDATE TBL_CALLDATA_MASTER_BACKUP
                  SET   [Status] = @i_Status,
                  ProcessStatus = @i_ProcessStatus 
                  Where CallID = @i_CallID 

        END 
        ELSE
        BEGIN

        INSERT INTO TBL_CALLDATA_MASTER_BACKUP( CallID,ApplicationID,  CallData,[Status], ProcessStatus)
        VALUES ( @i_CallID,@i_AppID,  @i_CallData, @i_Status,
            @i_ProcessStatus );
        END       

    END TRY
    BEGIN CATCH     
        SET @o_ErrorCode=ERROR_NUMBER()
        SET @o_ErrorDescription=ERROR_MESSAGE()
    END CATCH
END

我在服务中使用的方法是:

public void UpdateCallDataStatus(Hashtable htCallDataStatusInfo)
        {
            int errorCode = 0;
            string errorDesc = string.Empty;

            object[] outParamList = new object[0];
            SqlDatabase sqlDb = new SqlDatabase(_connStr);
            List<SqlParameter> paramList = new List<SqlParameter>();

            paramList.Add(sqlDb.CreateParameter("@i_CallID", SqlDbType.VarChar, 200, ParameterDirection.Input, htCallDataStatusInfo["CALL_ID"]));
            paramList.Add(sqlDb.CreateParameter("@i_SessionID", SqlDbType.VarChar, 200, ParameterDirection.Input, htCallDataStatusInfo["SESSION_ID"]));
            paramList.Add(sqlDb.CreateParameter("@i_ApplicationID", SqlDbType.VarChar, 10, ParameterDirection.Input, htCallDataStatusInfo["APP_ID"]));
            paramList.Add(sqlDb.CreateParameter("@i_CallDateTime", SqlDbType.DateTime, 50, ParameterDirection.Input, htCallDataStatusInfo["CALL_START_TIME"]));
            paramList.Add(sqlDb.CreateParameter("@i_CallData", SqlDbType.Xml, 500000, ParameterDirection.Input, htCallDataStatusInfo["CALL_DATA"]));
            paramList.Add(sqlDb.CreateParameter("@i_Status", SqlDbType.Char, 1, ParameterDirection.Input, htCallDataStatusInfo["STATUS"]));
            paramList.Add(sqlDb.CreateParameter("@i_ProcessStatus", SqlDbType.VarChar, 25, ParameterDirection.Input, htCallDataStatusInfo["PROCESS_STATUS"]));
            paramList.Add(sqlDb.CreateParameter("@i_ProcessFailureReason", SqlDbType.VarChar, 1000, ParameterDirection.Input, htCallDataStatusInfo["FAILURE_REASON"]));
            paramList.Add(sqlDb.CreateParameter("@o_ErrorCode", SqlDbType.Int, ParameterDirection.Output));
            paramList.Add(sqlDb.CreateParameter("@o_ErrorDescription", SqlDbType.VarChar, 200, ParameterDirection.Output));

            sqlDb.ExecuteNonQuery("PROC_UPDATE_IVR_CALLDATA_STATUS", CommandType.StoredProcedure, paramList, out outParamList);
            errorCode = Convert.ToInt32(Convert.ToString(outParamList[0]));
            errorDesc = Convert.ToString(outParamList[1]);

            this.Response.ErrorCode = errorCode;
            this.Response.ErrorDescription = errorDesc;
        }

我不知道如何解决这个问题。如果您需要更多详细信息,请告诉我。

因为您将 10 个参数作为命令传递,而您只在存储过程中定义了 7 个

ALTER PROCEDURE [dbo].[PROC_UPDATE_IVR_CALLDATA_STATUS]
(
    @i_CallID               VARCHAR(50), 
    @i_AppID        VARCHAR(24), 
    @i_CallData             XML,
    @i_Status               CHAR(1),
    @i_ProcessStatus        VARCHAR(25), 
    @o_ErrorCode            INT OUTPUT,
    @o_ErrorDescription     VARCHAR(200) OUTPUT
)

定义由 sql cmd

传递的存储过程中的所有输出参数

喜欢

ALTER PROCEDURE [dbo].[PROC_UPDATE_IVR_CALLDATA_STATUS]
(
    @i_CallID               VARCHAR(50), 
    @i_ApplicationID        VARCHAR(24), 
    @i_CallData             XML,
    @i_Status               CHAR(1),
    @i_ProcessStatus        VARCHAR(25), 
    @o_ErrorCode            INT OUTPUT,
    @o_ErrorDescription     VARCHAR(200) OUTPUT,
    @i_SessionID            VARCHAR(200),
    @i_CallDateTime         DATETIME,
    @i_ProcessFailureReason VARCHAR(1000)            
)