valor salida retorno recuperar procedimiento parametros parametro obtener framework ejecutar con almacenado c# sql sql-server stored-procedures dapper

retorno - Pasando los parámetros de salida al procedimiento almacenado usando dapper en el código c#



recuperar parametro de salida c# (1)

Tengo un procedimiento almacenado en este formato.

CREATE PROCEDURE SP_MYTESTpROC @VAR1 VARCHAR(10), @VAR2 VARCHAR(20), @BASEID INT , @NEWID INT OUTPUT As Begin INSERT INTO TABLE_NAME(username, firstname) select @VAR1, @VAR2 WHERE ID = @BASEID SET @NEWID = SCOPE_IDENTITY() AS INT END

Estoy llamando a este procedimiento almacenado desde el código C # usando dapper. Mi pregunta es: ¿cómo paso el parámetro de salida al procedimiento almacenado mientras uso dapper?


Simplemente buscando el archivo Test.cs puedes encontrar este ejemplo.

public void TestProcSupport() { var p = new DynamicParameters(); p.Add("a", 11); p.Add("b", dbType: DbType.Int32, direction: ParameterDirection.Output); p.Add("c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue); connection.Execute(@"create proc #TestProc @a int, @b int output as begin set @b = 999 select 1111 return @a end"); connection.Query<int>("#TestProc", p, commandType: CommandType.StoredProcedure).First().IsEqualTo(1111); p.Get<int>("c").IsEqualTo(11); p.Get<int>("b").IsEqualTo(999); }

Entonces, supongo que tu código C # podría escribirse como

public void InsertData() { var p = new DynamicParameters(); p.Add("VAR1", "John"); p.Add("VAR2", "McEnroe"); p.Add("BASEID", 1); p.Add("NEWID", dbType: DbType.Int32, direction: ParameterDirection.Output); connection.Query<int>("SP_MYTESTpROC", p, commandType: CommandType.StoredProcedure); int newID = p.Get<int>("NEWID"); }

Como nota al margen, no use SP como prefijo para su procedimiento almacenado. Está reservado para los procedimientos definidos por el sistema y usted podría tener problemas si Microsoft decide usar el mismo nombre. Si bien es improbable, es una mala práctica y ¿por qué arriesgarse?