2012-03-01 8 views
0

USINGをADO.NETコードで使用していないプロジェクトがあります。私はそれらの閉鎖されていない接続を掃除しています。以下のコードは、try/catch/finallyとのベストプラクティスですか?私はまた、私はコマンドと接続の処分の間に処分しているSqlTransactionが含まれているいくつかがあります。ADO.NETと使用せずに廃棄する

 SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["MyNGConnectDashBoardConnectionString"].ToString()) 
     SqlDataAdapter da = new SqlDataAdapter("your sql is here", con); 
     da.Fill(ds); 

また、単純な再:Fill()が接続を閉じるため

SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["MyNGConnectDashBoardConnectionString"].ToString()); 
      SqlCommand cmd = new SqlCommand(); 
      DataSet ds = new DataSet(); 
      try 
      { 
       con.Open(); 
       cmd.Connection = con; 

       SqlDataAdapter da = new SqlDataAdapter(cmd); 
       da.Fill(ds); 

      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 

      finally 
      { 
       cmd.Dispose(); 
       con.Dispose(); 
      } 
+0

ここで非常によく似た質問をしました:http://stackoverflow.com/questions/9525307/does-sqltransaction-need-to-have-dispose-called –

答えて

1

実際には、SqlDataAdapter.Fill(dataset)メソッドを使用するときに接続を閉じることについて心配する必要はありません。このメソッドは、すべてのFillを実行した後に接続を閉じます。

SqlCommand.Dispose()また、コマンド自体には、クリーンアップするためのアンマネージドリソースがないため、コールする必要はありません。ある時点でSqlConnection.Close()が呼び出されているのであれば心配する必要があります。これはFillの後に行われます。

0

のベストプラクティスは、usingの代わりにも必要とされていない使用して、あなたのケースではしかし

のtry /ついに:)

を使用しています - 例外を放棄することはまったく意味がありません。エラーをログに記録する必要がある場合は、@ Cory suggestとしてplain throw;を使用してください。

+0

私は知っていますが、私は200データベース呼び出しを更新してテストできません私が持っている時間に私は私が持っているものと仕事をする必要があります。 –

+0

私の答えに詳細を追加しました。 –

0

あなたが持っているものは問題ありません。管理されていないリソースを使用するオブジェクトを処分することは、常に良い考えです。しかし、あなたは常に明示的に廃棄を呼び出すの病気場合は、ベストプラクティスはusingを使用することが考えられます:あなたは、例外を「再スロー」するつもりなら

using (SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["MyNGConnectDashBoardConnectionString"].ToString())) 
{ 
    using (SqlCommand cmd = new SqlCommand()) 
    { 
     DataSet ds = new DataSet(); 
     try 
     { 
      con.Open(); 
      cmd.Connection = con; 

      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(ds); 

     } 
     catch (Exception ex) 
     { 
      throw; // I changed this too! 
     } 
    } 
} 

はまた、あなたはほとんど常に単にthrowたい。 throw ex;の場合、スタックトレースの一部が失われます。

関連する問題