【问题标题】:"Parameter count does not match Parameter Value count" is coming when i am using ParameterDirection.ReturnValue当我使用 ParameterDirection.ReturnValue 时出现“参数计数与参数值计数不匹配”
【发布时间】:2013-05-01 09:56:08
【问题描述】:

我想通过从 SQl 过程返回来获取值,但我收到此错误“参数计数与参数值计数不匹配”。 我的代码是:

public int getControlTypeIDByVal()
    {
        int retVal = 0;
        try
        {
            SqlParameter[] _param = new SqlParameter[2];
            _param[0] = new SqlParameter("@ControlName2", ControlName);
            _param[1] = new SqlParameter("@RetVal", SqlDbType.Int);
            _param[1].Direction = ParameterDirection.ReturnValue;

            SqlDataAccess.ExecuteNonQuery(SqlDataAccess.ConnectionString, "PR_getControlTypeIDByVal", _param);
            if (!clsCommonFn.isNullOrEmpty(_param[1].ToString()))
            {
                retVal = Convert.ToInt32(_param[1]);
            }
        }
        catch (Exception e)
        {
            errorMsg = e.Message;
        }
        return retVal;
    }

而Sp是:-

CREATE PROCEDURE PR_getControlTypeIDByVal
@ControlName2   NVARCHAR(200)
AS
-- EXEC PR_getControlTypeIDByVal 'Jaisalmer 2N/3D'
BEGIN
DECLARE @retVal INT
SET @retVal=0
    SELECT @retVal=ControlTypeID FROM ControlTypes
    WHERE LTRIM(RTRIM(ControlName))=LTRIM(RTRIM(@ControlName2))
PRINT(@retVal)  
RETURN @retVal
END

请帮帮我。

谢谢

【问题讨论】:

  • 能否展示SqlDataAccess.ExecuteNonQuery()函数的代码

标签: asp.net sql-server-2008 c#-4.0


【解决方案1】:

如果您想使用ExecuteNonQuery(),则可以将ParameterDirection 更改为ParameterDirection.OutPut。如果是这种情况,则在 c# 中声明两个参数,一个用于输入,一个用于输出。但在 SQL Server 中,您没有声明输出参数。

您需要明确定义输出参数。你可以试试这个:

CREATE PROCEDURE PR_getControlTypeIDByVal
    @ControlName2   NVARCHAR(200)
    @retVal INT OUTPUT
    AS
    -- EXEC PR_getControlTypeIDByVal 'Jaisalmer 2N/3D'
    BEGIN

    SET @retVal=0
        SELECT @retVal=ControlTypeID FROM ControlTypes
        WHERE LTRIM(RTRIM(ControlName))=LTRIM(RTRIM(@ControlName2))

    RETURN
    END

更新:如果你想使用ParameterDirection.ReturnValue,你可以使用类似这样的东西不改变你的SP

retVal = yourSQLCommand.Parameters[@retVal].value;

但是,您可以通过不首先添加返回值并使用以下内容来返回结果:

retVal = Convert.ToInt32(yourSQLCommand.ExecuteScalar());

【讨论】:

  • 当我们创建参数为 parameterdirection.output 时,我们必须在 SQL 中编写输出,但我使用了 ParameterDirection.ReturnValue。那么不需要这个,我们只需要返回一个值
  • 是的,我错过了 SqlDataAccess.ExecuteNonQuery() 函数中的第二个参数,即 CommandType.StoredProcedure。意味着我们必须这样写:SqlDataAccess.ExecuteNonQuery(SqlDataAccess.ConnectionString, CommandType.StoredProcedure, "PR_insertUpdateWebAdStatistics", _param);谢谢,现在运行良好
【解决方案2】:

使用参数方向作为“@RetVal”的“ParameterDirection.ReturnValue”。所以存储过程中不需要指定这个参数。

并在其价值使用上检索

_param[1].value.toString();

然后将其转换为整数。

【讨论】:

    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    相关资源
    最近更新 更多