2015-06-30 101 views
0

我正在使用存儲過程插入表FASEC。我想在調用Store Procedure之後獲取最後一個ID。ASP.NET MVC通過存儲過程獲取插入項目的ID

如何在調用存儲過程後獲取插入的最後一個ID?

fasec.IDFASEC始終爲0

控制器:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult CreateFASEC([Bind(Prefix = "Item1")] FASEC fasec) 
    { 
     if (ModelState.IsValid) 
     { 
      ObjectParameter p_Result = new ObjectParameter("p_Result", typeof(Int32)); 

      db.SPINSFASEC(fasec.FECHAFASEC, fasec.DIAGNOSTICOFINAL, fasec.VIGENTE, fasec.IDCIE10, 
       fasec.IDPRESTADOR, fasec.HISTORIALMEDICO, fasec.FECHAINICIO, fasec.FECHATERMINO, 
       fasec.FECHARENOVACION, fasec.IDBENEFICIARIO, fasec.IDTIPOEVALUACION, fasec.IDESTADOFASEC, 
       fasec.RESOLUCION, fasec.OBSERVACION, fasec.RUTAUTORIZO, fasec.IDEMPRESA, p_Result); 

      if (p_Result.Value == DBNull.Value) 
      { 
       return RedirectToAction("Index", new { mostrarError = 1}); 
      } 
      else 
      {      
       db.SaveChanges(); 

       var lastId = fasec.IDFASEC; 

      }     
     } 
     return RedirectToAction("Index"); 
    } 

存儲過程:

create or replace PROCEDURE spInsFasec 
    (p_FechaFasec  IN FASEC.FECHAFASEC%TYPE, 
    p_DiagnosticoFinal IN FASEC.DIAGNOSTICOFINAL%TYPE, 
    p_Vigente   IN FASEC.VIGENTE%TYPE, 
    p_IdCie10   IN FASEC.IDCIE10%TYPE, 
    p_IdPrestador  IN FASEC.IDPRESTADOR%TYPE, 
    p_HistorialMedico IN FASEC.HISTORIALMEDICO%TYPE, 
    p_FechaInicio  IN FASEC.FECHAINICIO%TYPE, 
    p_FechaTermino  IN FASEC.FECHATERMINO%TYPE, 
    p_FechaRenovacion IN FASEC.FECHARENOVACION%TYPE, 
    p_IdBeneficiario IN FASEC.IDBENEFICIARIO%TYPE, 
    p_IdTipoEvaluacion IN FASEC.IDTIPOEVALUACION%TYPE, 
    p_IdEstadoFasec  IN FASEC.IDESTADOFASEC%TYPE, 
    p_Resolucion  IN FASEC.RESOLUCION%TYPE, 
    p_Observacion  IN FASEC.OBSERVACION%TYPE, 
    p_RutAutorizo  IN FASEC.RUTAUTORIZO%TYPE, 
    p_IdEmpresa   IN FASEC.IDEMPRESA%TYPE, 
    p_result   OUT NUMBER) IS 

    cCeroValor CONSTANT NUMBER := 0; 
    cUnoValor CONSTANT NUMBER := 1; 
    vCont NUMBER(10); 
    vIDFASEC NUMBER := 0; 

BEGIN 

SELECT COUNT(*) INTO vCont 
     FROM COBERTURA 
     WHERE ACTIVO = cUnoValor AND 
      IDEMPRESA = p_IdEmpresa; 

IF vCont > 0 THEN 

    INSERT INTO FASEC( 
    FECHAFASEC, 
     DIAGNOSTICOFINAL, 
     VIGENTE, 
     IDCIE10, 
     IDPRESTADOR, 
     HISTORIALMEDICO, 
     FECHAINICIO, 
     FECHATERMINO, 
     FECHARENOVACION, 
     IDBENEFICIARIO, 
     IDTIPOEVALUACION, 
     IDESTADOFASEC, 
     RESOLUCION, 
     OBSERVACION, 
     RUTAUTORIZO, 
     IDEMPRESA) 
    VALUES 
    (p_FechaFasec, 
     p_DiagnosticoFinal, 
     p_Vigente, 
     p_IdCie10, 
     p_IdPrestador, 
     p_HistorialMedico, 
     p_FechaInicio, 
     p_FechaTermino, 
     p_FechaRenovacion, 
     p_IdBeneficiario, 
     p_IdTipoEvaluacion, 
     p_IdEstadoFasec, 
     p_Resolucion, 
     p_Observacion, 
     p_RutAutorizo, 
     p_IdEmpresa) 
     RETURNING IDFASEC INTO vIDFASEC;  

    INSERT INTO COBERTURAFASEC 
        (IDCOBERTURAFASEC, 
        IDFASEC, 
        IDCOBERTURA, 
        PORCENTAJEREEMBOSO) 
        SELECT SEQ_COBERTURAFASEC.NEXTVAL, 
          vIDFASEC, 
          IDCOBERTURA, 
          PORCENTAJEREEMBOSO 
         FROM COBERTURA 
        WHERE ACTIVO = cUnoValor AND 
          IDEMPRESA = p_IdEmpresa; 

p_result := 1; 

END IF; 

END; 

回答

0

你可以從存儲過程中插入值使用輸出

INSERT INTO FASEC( 
FECHAFASEC, 
    DIAGNOSTICOFINAL, 
    VIGENTE, 
) 
output inserted.FECHAFASEC //inserted.coloumn Name 
    VALUES(
    )