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?