例外のソースを明確に考えて、ビジネスレイヤーによってキャッチされる必要がある例外を処理したいデータアクセスレイヤーを作成しています。私はこのようなことをしています..
編集
private void OpenConnection()
{
if (ConnectionState.Closed == _connection.State)
_connection.Open();
}
上記のコードでは、例外の理由を知っています。そして、メッセージを表示するためにBLで処理するために投げたい。
しかし、私はDLでこの関数を他のコード行でのみ使用しています。
protected DataTable GetDataTable(string Query)
{
DataTable dt =new DataTable();
SqlCommand cmd = InitializeCommand(Query);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
try
{
OpenConnection();
adp.Fill(dt);
CloseConnection(true);
return dt;
}
catch (SqlException ex)
{ throw ex; }
finally
{
adp.Dispose();
cmd.Dispose();
}
}
OpenConnection()
接続を開こうとしているときに例外が発生した場合、例外throw ex
を返すと予想していたときに、OpenConnection 自体の行でアプリケーションがクラッシュします。この問題をどのように処理すればよいですか。GetDataTable
さらに、例外が発生した場合、この時点で発生したのと同じ詳細でどのような種類の例外をスローする必要があるか、2 番目の関数で私の質問を拡張します。私はこの方法しか知りませんが、これは私が思う素晴らしい方法です。
throw new ApplicationException(ex.message,ex.innerexception)
編集
サーバーへの接続が失われたか、間違った接続文字列を使用しているとします。BL の GetDataTable 関数を使用します。どこで例外が発生し、どこで処理すればよいですか? DLで発生した問題を知りたいです。BLを考えるとDLのコードがわからない