2015-12-22 54 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

相關問題