sql-server 我无法捕获过程的输出

tkclm6bt  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(198)

在调试允许创建记录的函数时,无法获得过程的输出。“Output”从不更改其初始化值(“”)。

string Agregar(Empleado reg)
    {
        string mensaje = "";
        string output = "";

        SqlConnection cn = new SqlConnection(cadena);

        try
        {
            cn.Open();

            SqlCommand cmd = new SqlCommand("sp_pregunta02_3 @codEmp,@nom,@ape,@idpais,@email", cn);
            cmd.Parameters.AddWithValue("@nom", reg.nomEmployee);
            cmd.Parameters.AddWithValue("@ape", reg.apeEmployee);
            cmd.Parameters.AddWithValue("@idpais", reg.idpais);
            cmd.Parameters.AddWithValue("@email", reg.emailEmployee);
            cmd.Parameters.Add("@codEmp", SqlDbType.Int).Direction = ParameterDirection.Output;

            cmd.ExecuteNonQuery();          

            output = cmd.Parameters["@codEmp"].Value.ToString();
            mensaje = $"El codigo {output} ya existe";

            if (!output.Equals("0"))
                mensaje = $"Se ha registro el Empleado de codigo {output}";
        }
        catch (SqlException ex) 
        {
             mensaje = ex.Message; 
        }
        finally 
        {
             cn.Close(); 
        }

        return mensaje;
    }

该过程从生成表中没有的随机数的函数返回一个随机雇员代码,如果该代码已经存在,则返回0。

CREATE OR ALTER PROCEDURE  sp_pregunta02_3
    @codEmp int OUTPUT,
    @nom varchar(255),
    @ape varchar(255),
    @idpais char(3),
    @email varchar(255)
AS
BEGIN 
    SET @codEmp = dbo.fn_pregunta02();
    PRINT @codEmp

    IF @codEmp <> 0
    BEGIN 
        INSERT INTO tb_employee 
        VALUES (@codEmp, @nom, @ape, @idpais, @email)
    END
END
niknxzdl

niknxzdl1#

请尝试以下代码:

SqlCommand cmd = new SqlCommand("sp_pregunta02_3, cn);
        cmd.Parameters.Add("@nom", SqlDbType.VarChar) = reg.nomEmployee;
        cmd.Parameters.Add("@ape", SqlDbType.VarChar) = reg.apeEmployee;
        cmd.Parameters.Add("@idpais", SqlDbType.Char) = reg.idpais;
        cmd.Parameters.Add("@email", SqlDbType.VarChar) = reg.emailEmployee;
        cmd.Parameters.Add("@codEmp", SqlDbType.Int).Direction = ParameterDirection.Output;

        cmd.ExecuteNonQuery();          

        output = cmd.Parameters["@codEmp"].Value.ToString();

在存储过程中,必须选择输出

CREATE OR ALTER PROCEDURE  sp_pregunta02_3
 @codEmp int output,
 @nom varchar(255),
 @ape varchar(255),
 @idpais char(3),
 @email varchar(255)
 as
BEGIN 
     SET @codEmp = dbo.fn_pregunta02();
     PRINT @codEmp
     IF @codEmp <> 0
     BEGIN 
        insert into tb_employee 
        values(@codEmp, @nom, @ape, @idpais, @email)
    END
   select @codEmp 
END

相关问题