首页 > 解决方案 > 过程或函数 Proc_PIP_Employee 指定了太多参数

问题描述

我收到错误

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

尝试Proc_PIP_Employee从 C# 代码调用过程时。检查的参数计数和那些相同。数据类型也相同。即使在那之后得到同样的错误。

C#代码是

public int Add_Record(Employee emp)
{
    try
    {
        if (con.State != ConnectionState.Open)                
            con.Open();               

        using (SqlCommand cmd = con.CreateCommand())
        {
            SqlParameter RETURN_VALUE_OUTPUT = new SqlParameter();
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.CommandText = "dbo.Proc_PIP_Employee";

            cmd.Parameters.Add("@Flag", SqlDbType.Int).Value = 1;
            cmd.Parameters.Add("@Empid", SqlDbType.Int).Value = 0;
            cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = emp.Name ;
            cmd.Parameters.Add("@Designation", SqlDbType.VarChar).Value = emp.Designation;
            cmd.Parameters.Add("@Department", SqlDbType.VarChar).Value = emp.Department;
            cmd.Parameters.Add("@DateofJoin", SqlDbType.DateTime).Value = emp.Dateofjoin;
            cmd.Parameters.Add("@Phone", SqlDbType.VarChar).Value = emp.Phone;
            cmd.Parameters.Add("@Isactive", SqlDbType.Int).Value = emp.IsActive;
            cmd.Parameters.Add("@LoginUser", SqlDbType.NVarChar).Value = "admin";

            RETURN_VALUE_OUTPUT = cmd.Parameters.Add("@ReturnId",SqlDbType.Int);
            RETURN_VALUE_OUTPUT.Direction = ParameterDirection.Output;

            cmd.ExecuteNonQuery();

            ReturnID = Convert.ToInt32(RETURN_VALUE_OUTPUT.Value.ToString());
        }             
    }
    catch (SqlException ex)
    {
    }

    return ReturnID;
}

存储过程是:

ALTER PROCEDURE [dbo].[Proc_PIP_Employee]
    @Flag int,
    @Empid int,
    @Name varchar(500),
    @Designation varchar(200),
    @Department varchar(200),
    @DateofJoin datetime,
    @Phone varchar(3000),
    @Isactive int,
    @LoginUser nvarchar(500)
AS
BEGIN
    SET NOCOUNT ON ;

    DECLARE @errorMessage VarChar(8000), 
            @errorSeverity Int,
            @errorState Int,
            @ReturnId Int,
            @AlCode varchar(50),
            @AlDesc varchar(1000),
            @AlOp varchar(50),
            @AlStatus varchar(50)

    BEGIN TRY
    BEGIN TRANSACTION
        IF (@Flag = 1)
        BEGIN
            IF EXISTS (SELECT 1 FROM dbo.PIP_Employee 
                       GROUP BY Name, Phone 

标签: c#sql-server

解决方案


您正在将此存储过程的参数添加到 C# 代码中 - 但存储过程接口中OUTPUT没有参数:@ReturnId OUTPUT

SqlParameter RETURN_VALUE_OUTPUT = new SqlParameter();
RETURN_VALUE_OUTPUT = cmd.Parameters.Add("@ReturnId",SqlDbType.Int);
RETURN_VALUE_OUTPUT.Direction = ParameterDirection.Output;

如果您试图捕获返回值 - 然后ParameterDirection.ReturnValue使用

SqlParameter RETURN_VALUE_OUTPUT = new SqlParameter();
RETURN_VALUE_OUTPUT = cmd.Parameters.Add("@ReturnId",SqlDbType.Int);
RETURN_VALUE_OUTPUT.Direction = ParameterDirection.ReturnValue;

推荐阅读