2011-03-22 3 views
1

나는 SqlException에 의해 생성 된 에러 코드를 볼 필요가있다. 그러나 나는 발사 할 수 없다. NHibernate를 사용하고 내 테이블에 SQL UNIQUE CONSTRAINT 설정이 있습니다. 해당 제약 조건을 위반할 때 오류 코드를 catch하고이를 기반으로 사용자 친화적 인 메시지를 생성해야합니다. 여기 내 시도/잡는 예제입니다 :Hibernate Transaction을 시도 할 때 SqlException을 잡아라

using (var txn = NHibernateSession.Current.BeginTransaction()) { 
    try { 
     Session["Report"] = report; 
     _reportRepository.SaveOrUpdate(report); 
     txn.Commit(); 
     Fetch(null, report.ReportId, string.Empty); 
    } catch (SqlException sqlE) { 
     var test = sqlE.ErrorCode; 
     ModelState.AddModelError("name", Constants.ErrorMessages.InvalidReportName); 
     return Fetch(report, report.ReportId, true.ToString()); 
    } catch (InvalidStateException ex) { 
     txn.Rollback(); 
     ModelState.AddModelErrorsFrom(ex, "report."); 
    } catch (Exception e) { 
     txn.Rollback(); 
     ModelState.AddModelError(String.Empty, Constants.ErrorMessages.GeneralSaving); 
    } 
} 

제발 용서해주십시오. GenericADOException를 잡아와 InnerException 특성을보고하는 방법을 보여줍니다

답변

7

Check this out : 컨트롤러에 직접 SQLEXCEPTION을 잡는

catch (GenericADOException ex) 
{ 
    txn.Rollback(); 
    var sql = ex.InnerException as SqlException; 
    if (sql != null && sql.Number == 2601) 
    { 
     // Here's where to handle the unique constraint violation 
    } 
    ... 
} 
+1

당신은 남자 야! 정말 고맙습니다. 나는이 사이트를 좋아한다. – BueKoW

+0

@BueKoW, 답을 승인 된 것으로 표시하는 것을 잊지 마십시오. –

관련 문제