次のコードは、例外がある場合に接続を開いたままにしますか?
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();
}
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
Using
を使用します
using(SqlConnection conn = new SqlConnection())
{
//put all your code here.
}
try
catch
finally
接続は常に最後に閉じる必要があるため、これを処理する適切な方法です。しかし、それだけでなくconn != null
だけでなく、conn
状態がClosed
でない場合も同様です。
コマンドだけでなく、接続周辺の使用を使用してみませんか?
using
ステートメントを使用する必要があります。これは、手間をかけずに接続を閉じる処理を行います http://davidhayden.com/blog/dave/archive/2005/01/13/773.aspx
あなたは次の方法を試してみる必要があります。接続が最終的にブロックされるため
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
}