Fox DB Access 예외 처리¶
Fox DB Access 는 단일 API 를 통해 다양한 데이터베이스에 접근하는 방법을 제공합니다. Fox DB Access 는 액세스 하고자 하는 데이터베이스에 따라 데이터 프로바이더를 내부적으로 사용합니다. Fox DB Access 의 구조에 관련된 상세한 내용은 FoxDbAccess
인스턴스 생성 문서를 참고 하십시요.
Microsoft.Data.SqlClient
, Managed ODP.NET Core, Npagsql 등 데이터 프로바이더들은 오류 발생시 고유의 예외 타입을 사용합니다. 예를 들어 Microsoft.Data.SqlClient
는 SqlException
타입을, Managed ODP.NET Core 는 OracleException
타입을, Npgsql 은 NpgsqlExceptin
타입을 사용 합니다. 개별 데이터베이스마다 서로 다른 타입의 예외를 throw
하기 때문에 단일 API 를 사용하여 다양한 데이터베이스에 접근하는 코드에서 예외 처리가 어려워질 수도 있습니다.
Fox DB Access 는 오류 상황에서 다양한 데이터 프로바이더들의 예외 타입들 대신 FoxDbException
단일 타입만을 사용합니다. 그리고 각 데이터 프로바이더가 실제로 throw 한 예외는 InnerException
속성을 통해 제공합니다. FoxDbException
클래스는 데이터베이스 오류 정보를 나타내는 오류 코드 정보를 ErrorCode
속성을 통해 제공합니다. 다음은 FoxDbException
타입을 사용하여 데이터베이스에 독립적인 예외 처리 방법을 보여줍니다.
FoxDbAccess
추상 클래스 및 그 파생 클래스에서 데이터베이스를 액세스할 때 try~catch
문장을 통해 개별 데이터 프로바이더의 예외를 잡아냅니다. 예외 처리기는 새롭게 FoxDbException
예외를 생성하고 메시지와 ErrorCode 속성을 설정하며 try~catch
문에 이해 잡아낸 데이터 프로바이더 개별 예외를 InnerException
에 설정합니다. 그리고 새롭개 생성한 FoxDbException
예외를 다시 발생(rethrow) 시킵니다.
FoxDbException
타입을 사용함으로써 데이터베이스에 독립적인 예외 처리 코드를 작성할 수 있지만 ToString
메서드에 의해 표시되는 상세 예외 정보가 다소 혼란스러울 수도 있습니다. ToString
메서드가 생성하는 예외 상세 정보는 InnerException
속성에 기록된 예외 메시지도 같이 표시되기 때문입니다. 다음은 Oracle 에서 발생한 오류를 FoxDbException 으로 catch 하여 상세 정보를 표시한 내용입니다. FoxDbException
의 오류 메시지와 더불어 InnerException
으로 설정된된 OracleException
의 오류 메시지도 동일하게 표시되는 것을 확인할 수 있습니다.
Information
FoxDbException
타입 대신 DbException
타입을 사용해도 데이터베이스에 독립적인 예외 처리 코드를 작성할 수 있으며 오류 코드 역시 제공이 가능합니다. FoxDbException
타입의 근원은 NeoDEEX 가 처음 설계되고 개발되었던 .net framework 1.x 버전으로 거슬러 올라가며 그 때 당시 각 데이터 프로바이더의 예외 타입들은 DbException
으로부터 파생되지도 않았으며 오류 코드를 제공하는 방법도 각기 달랐었습니다. 데이터베이스에 독립적인 예외 처리를 위해서는 FoxDbException
타입이 필요하였고 이 타입은 NeoDEEX 의 데이터베이스 액세스 코드의 여러 부분에서 사용되었습니다. 그리고 현재에는 과거 코드와의 호환성 등의 이유로 여전히 사용되고 있습니다.
Summary¶
FoxDbException
예외 클래스는 예외 상세 정보에서 가독성이 부분적으로 떨어질 수 있지만 데이터베이스 독립적인 예외 처리를 수행할 수 있으며 오류 코드 등의 추가적인 오류 관련 정보를 제공할 수 있습니다.