我是dapper-dot-net的新手,我正在尝试调用名为 esp_TRV_PERIODO_MES_CRU 的存储过程,它返回 int ,即 IdPeriodo < / strong>插入/现有/更新的记录
请不要删除我的代码中的评论,因为它们显示了我尝试但未成功的其他方法
DECLARE @return_value int
EXEC @return_value = [dbo].[esp_TRV_PERIODO_MES_CRU]
@anio = 2017,
@mes = 12,
@mesCerrado = NULL
SELECT 'Return Value' = @return_value
我有以下(非工作)实现
public Tescalar ExecuteScalar<Tescalar>(string spName, DynamicParameters p)
{
Tescalar resp ;
resp = default(Tescalar);
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
connection.Open();
resp = connection.ExecuteScalar<Tescalar>(spName, p, null, connection.ConnectionTimeout, commandType: CommandType.StoredProcedure);
//connection.Execute(spName, p, null, connection.ConnectionTimeout, commandType: CommandType.StoredProcedure);
}
catch (Exception ex)
{
throw ex;
}
return resp;
}
}
我正在调用上述方法:
public Int32 ConsultarPeriodoMes(int anio, int mes)
{
Int32 idPeriodo;
DynamicParameters parametros;
DynamicParameters resp;
parametros = new DynamicParameters();
parametros.Add("@anio", anio);
parametros.Add("@mes", mes);
parametros.Add("@mesCerrado", null);
//idPeriodo = GetDataBaseHelper().ExecuteProcedureNonQuery("esp_TRV_PERIODO_MES_CRU", parametros);
//resp = GetDataBaseHelper().ExecuteProcedure("esp_TRV_PERIODO_MES_CRU", parametros);
//idPeriodo = -999;
idPeriodo = GetDataBaseHelper().ExecuteScalar<Int32>("esp_TRV_PERIODO_MES_CRU", parametros);
return idPeriodo;
}
我测试了存储过程 esp_TRV_PERIODO_MES_CRU 并返回了INSERTED / FOUND / UPDATED实体的预期 idPeriodo ,这里是SP
CREATE PROC [dbo].[esp_TRV_PERIODO_MES_CRU]
@anio INT,
@mes INT,
@mesCerrado BIT
AS
BEGIN
DECLARE
@idperiodo AS INT
--Verfica si el periodo existe, dado los parametros anio y mes
SELECT @idperiodo = ISNULL((SELECT IdPeriodoMes FROM TRV_PERIODO_MES(NOLOCK) WHERE Anio=@anio AND Mes=@mes),-1)
IF @idperiodo > -1
UPDATE [dbo].[TRV_PERIODO_MES]
SET [CierreEjecutado] = ISNULL(@mesCerrado, 0)
WHERE IdPeriodoMes = @idperiodo
ELSE
BEGIN
INSERT INTO TRV_PERIODO_MES VALUES(@anio,@mes,ISNULL(@mesCerrado, 0))
SET @idperiodo = SCOPE_IDENTITY();
END
RETURN @idperiodo
END
为了能够使用dapper-dot-net
获取上面显示的存储过程的返回值,我需要修复什么?答案 0 :(得分:-2)
您也可以使用DynamicParameters。
using (IDbConnection con = new SqlConnectionFactory().Create())
{
var p = new DynamicParameters();
//parameters
p.Add("@x", valueX);
p.Add("@y", valueY);
//return value
p.Add("@idperiodo", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
//PSET_SOURCEEVENT - name of procedure
con.Execute("PSET_SOURCEEVENT", p, commandType: CommandType.StoredProcedure);
con.Close();
return p.Get<int>("@idperiodo");
}