web-dev-qa-db-ja.com

例外が発生した場合にデータベース接続を閉じる正しい方法

次のコードは、例外がある場合に接続を開いたままにしますか?

Microsoft SQL CompactEditionデータベースを使用しています。

try
{
    SqlCeConnection conn = new SqlCeConnection(ConnectionString);

    conn.Open();

    using (SqlCeCommand cmd =
        new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
    {
      // do some stuff
    }

    conn.Close();
}
catch (Exception ex)
{
    ExceptionManager.HandleException(ex);
}

確かに良い方法は、tryの前に接続オブジェクトを宣言し、tryブロック内で接続を確立し、finallyブロックで閉じることです。

 SqlCeConnection conn = null;
 try
 {
    conn = new SqlCeConnection(ConnectionString);

    conn.Open();

    using (SqlCeCommand cmd =
        new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
    {
      // do some stuff
    }
}
catch (Exception ex)
{
    ExceptionManager.HandleException(ex);
}
finally
{
    if( conn != null )  conn.Close();
}
15
lowlyintern

SqlCeCommandブロックを使用してコード内でusingを処理する方法では、SqlCeConnectionに対して同じことを行うことができます。

SqlCeConnection conn;
using (conn = new SqlCeConnection(ConnectionString))
{
   conn.Open();
   using (SqlCeCommand cmd = 
       new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
   {
   // do some stuff
   }
}

注:usingを実装するクラスにはIDisposableブロックを使用できます。

編集:これはと同じです

try
{
    conn = new SqlCeConnection(ConnectionString);
    conn.Open();

    SqlCeCommand cmd = conn.CreateCommand();
    cmd.CommandText = "...";

    cmd.ExecuteNonQuery();
}
finally
{
    conn.Close();
}

参照: http://msdn.Microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection%28VS.80%29.aspx

29
shahkalpesh

Usingを使用します

using(SqlConnection conn = new SqlConnection())
{
//put all your code here.
}
8
John Hpa
try
catch
finally

接続は常に最後に閉じる必要があるため、これを処理する適切な方法です。しかし、それだけでなくconn != nullだけでなく、conn状態がClosedでない場合も同様です。

4
Robert Koritnik

コマンドだけでなく、接続周辺の使用を使用してみませんか?

0
Hans Olsson

usingステートメントを使用する必要があります。これは、手間をかけずに接続を閉じる処理を行います http://davidhayden.com/blog/dave/archive/2005/01/13/773.aspx

0
mamoo

あなたは次の方法を試してみる必要があります。接続が最終的にブロックされるため

try
{
    SqlCeConnection conn = new SqlCeConnection(ConnectionString);

    conn.Open();

    using (SqlCeCommand cmd =
        new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
    {
      // do some stuff
    }
}
catch (Exception ex)
{

}
finally
{
\\close connection here
}
0
Ravi Mendpara