Estoy tratando de hacer que el parámetro OUTPUT funcione, pero por alguna razón, se niega a hacerlo. Sigo quedando nulo como resultado. Si hago todo en el lado de SQL, funciona bien. Lo probé así,

DECLARE @test INT
EXEC MyProc @number = 1, @id = @test
PRINT @test

Lo que me dio la salida exactamente como esperaba. He revisado este código durante una hora y parece correcto. La causa probable es un error ID10T, pero mi cerebro simplemente no lo está viendo.

public static int MyFunc(int id)
{
    using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["cnString"].ConnectionString))
    {
        connection.Open();

        using (var cmd = new SqlCommand("dbo.MyProc", connection)
        {
            CommandTimeout = 120,
            CommandType = CommandType.StoredProcedure
        })
        {
            cmd.Parameters.AddWithValue("@number", SqlDbType.Int);
            var param = new SqlParameter("@id", SqlDbType.Int)
            {
                Direction = ParameterDirection.Output
            };
            cmd.Parameters.Add(param);
            cmd.ExecuteNonQuery();

            Debug.WriteLine(param.Value);

            return Convert.ToInt32(param.Value);
        }
    }
}

ALTER PROCEDURE dbo.MyProc
(
  @number INT ,
  @id INT OUTPUT
)
AS
    BEGIN
        SET NOCOUNT ON;
        SET @id = (
                             SELECT Id
                             FROM   SomeTable 
                             WHERE SomeValue = @number
                           );
        RETURN;
    END;
0
Yatrix 6 abr. 2017 a las 19:50

2 respuestas

La mejor respuesta

Tienes un error tipográfico simple ...

Está pasando el valor de SqlDbType.Int que espera en lugar del parámetro a MyFunc.

cmd.Parameters.AddWithValue("@number", SqlDbType.Int);

Debe ser

cmd.Parameters.AddWithValue("@number", id);
2
Marc Johnston 6 abr. 2017 a las 17:14

Puedes probar esto:

cmd.Parameters.AddWithValue("@number", SqlDbType.Int).Value = id;
cmd.Parameters.Add(param).Value = id
-1
oaninat 6 abr. 2017 a las 17:24