web-dev-qa-db-ja.com

Usingステートメント内で例外をキャッチする

sing ステートメントは、作成中のオブジェクトを破棄することを知っています。私がこのようなことをしたい場合のように:

    Using(SqlConnection conn = new SqlConnection(connString))
    {
      //some code
      //How to show the users if conn is not opened up or generated some kind of error?
    }

Connが開かれていないか、何らかのエラーが発生した場合にユーザーに表示するにはどうすればよいですか?

19
RG-3

usingブロック内に記述されたコードについて特別なことは何もありません。例外を処理するには、_try.catch_を使用するだけです。

_using(SqlConnection conn = new SqlConnection(connString))
{
    try
    {
        conn.Open();
        // do more stuff here......

    }
    catch(SqlException sqlEx)
    {
       // log error and possibly show to user in a MessageBox or something else
    }
}
_

using(...) { ... }ブロック自体は、「カプセル化」するリソース/オブジェクトが不要になったときに適切に破棄されるように設計されていますのみusingステートメント自体でエラーを処理するためにできることは何もありません。

したがって、オブジェクトの作成だけが失敗する可能性があると予想される場合は、usingブロック全体を_try ... catch_ブロック内に配置するか、_try ... catch ... finally_ブロックにフォールバックして確認する必要があります。自分で適切に処分する(アダムが彼の答えで示唆したように)。

22
marc_s