2015-12-22 59 views
0

我是很新的短小精悍点网,我试图调用存储过程调用esp_TRV_PERIODO_MES_CRU返回一个INT这是IdPeriodo插入/现有/更新的记录的如何用短小精悍获取存储过程返回的标值

请不要删除评论在我的代码,因为它们表明我已经试过,但没有succeded

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,并返回预期idPeriodo INSERTED/FOUND/UPDATED实体,这里是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 [email protected] AND [email protected]),-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

我刚刚发现这个问题 - http://stackoverflow.com/questions/749622/how-to-get-return-value-of-a-stored-procedure - 但不知道如何应用相同使用短小精灵的想法 –

回答

-3

您也可以使用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"); 
     } 
+0

这并不回答这个问题。而是发表这个评论。 – n4rzul

相关问题