Для процедуры или функции Proc_PIP_Employee указано слишком много аргументов - PullRequest
0 голосов
/ 09 мая 2020

Я получаю сообщение об ошибке

Процедура или функция 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 

1 Ответ

0 голосов
/ 09 мая 2020

Вы добавляете параметр OUTPUT для этой хранимой процедуры в свой код C#, но в вашем интерфейсе хранимой процедуры нет параметра @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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...