2

Asp.Net プロジェクトの 1 つでデータ アクセス コードを MySQL から MSSQL に変換しています。この機会に、プロバイダー固有のクラスまたは名前空間への依存関係を削除しようとしています。

そこで、MySqlCommand または SqlCommand クラスを直接操作する代わりに、DbProviderFactories.GetFactory() メソッドを使用して DbCommand オブジェクトを返します。

私が抱えている 1 つの問題は、MySqlExpection 例外をトラップするコードがあったことです。Sql 例外をトラップするプロバイダーに依存しない方法が必要です。これは可能ですか?

4

3 に答える 3

0

このようなものをお勧めします。このようにして、一般的な SQL 例外をスローするか、特定のロジック pe、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;
}
于 2013-09-01T15:32:25.250 に答える
0

SQL は DBexception を実装します。MSSQLもそうだと思いました。
DBExceptionを試しましたか?
テストする MSSQL がありません。

于 2013-09-01T18:06:35.393 に答える
0

このトピックに関する十分な知識がないため、データベースへのアクセスを提供する具象クラスから例外がスローされると考えています。いくつかの例外は本質的に一般的かもしれませんが、他の例外はそうではないかもしれません。ただし、抽象化するのではなく、特定のエラーをログに記録することをお勧めします。

詳細については、この SO の質問MSDNを確認してください。

于 2013-09-01T15:11:42.677 に答える