2013-09-01 2 views
2

My Asp.Net 프로젝트 중 하나에서 데이터 액세스 코드를 MySQL에서 MSSQL으로 변환 중입니다. 이 기회를 빌려 공급자 특정 클래스 또는 네임 스페이스에 대한 종속성을 제거하려고합니다.공급자가 알 수없는 방식으로 SQL 예외 잡기

그래서 MySqlCommand 또는 SqlCommand 클래스로 직접 작업하는 대신 DbCommand 개체를 반환하기 위해 DbProviderFactories.GetFactory() 메서드를 사용하고 있습니다.

내가 가진 한 가지 문제점은 MySqlExpection 예외를 트래핑 한 코드가 있다는 것입니다. SQL 예외를 트래핑하는 공급자 불가 지론 방식을 원합니다. 이것이 가능한가?

+0

당신이 잡는 예외는 데이터 계층 또는 그 외부에 있습니까? – jaimetotal

+1

SQL은 DBexception을 구현합니다. 나는 MSSQL도 마찬가지라고 생각했다. DBexceptoin을 사용해 보셨습니까? 테스트 할 MSSQL이 없습니다. – Paparazzi

+0

데이터 액세스 레이어 내. – Aheho

답변

0

SQL은 DBexception을 구현합니다. 나는 MSSQL도 마찬가지라고 생각했다.
DBexception을 시도 했습니까?
테스트 할 MSSQL이 없습니다.

0

주제에 대한 지식이 없으면 데이터베이스에 대한 액세스를 제공하는 구체적인 클래스에서 예외가 발생한다고 생각합니다. 일부 예외는 본질적으로 공통적 일 수 있지만 다른 예외는 그렇지 않을 수도 있습니다. 나는 어떤 추상화보다는 특정 오류를 기록하는 것이 우수 실행 (good practice)이라고 믿는다.

자세한 내용은 this SO questionMSDN을 확인하십시오.

0

나는 이와 같은 것을 권하고 싶습니다. 이렇게하면 일반 SQL 예외를 던지거나 주어진 논리와 연결된 사용자 정의 예외를 throw 할 수 있습니다 (예 : ConnectionTimedOutException).

catch(Exception ex) 
{ 
    if(DbProviderFactories.GetException(ex) is CustomSQLException) 
    { 
     //logic here 
    } 
    throw; 
} 
//Factory method 
public Exception GetException(Exception ex) 
{ 
    Exception result; 
    //Identifying which is the current one 
    switch (CurrentProvider) 
    { 
     case Provider.SQLServer: 
      //logic here 
      result = new CustomSQLServerException(ex); //which extends CustomSQLException 
      break; 
     default: 
      result = ex; 
      break; 
    } 
    return result; 
}