2016-07-17 3 views
2

私はSQLデータベースに接続する効率的なアプリケーションを設計しようとしていますが、SQLクエリごとにSQL接続を作成するメリット/デメリットは、 などです。以下のコードと同様に、一度設定しておけば、クラスに必要なときに呼び出すことができます。クエリごとに新しいSQL接続を作成する利点はありますか?

class SqlQuery 
    { 
     SqlConnection Connection = new SqlConnection(@myConnectionString); 
      public void fillInfoData() 
      { 
       SqlCommand updateCommand = new SqlCommand(
        @"my sql query", Connection); 
       Connection.Open(); 
       updateCommand.ExecuteNonQuery(); 
       Connection.Close(); 
      } 
    } 

また、新しいクエリごとに新しい接続を作成する必要がありますか?

  • EDIT:ジョンスキートは私がなぜ思っていた、クエリごとに新しい接続を作成する をお勧めしますか?
  • EDITありません2:He stated it in this answer.

答えて

6

クエリごとに接続をオープンし、あなたがそれを閉じるときに、それが戻って接続プールに行くと、フレームワークは、あなたが持っていないので、残り

を管理しますアライブ接続を維持する心配する、などのタイムアウト...

MSDNの記事

https://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx

+0

私がこれを読んだ場所は思い出せませんが、Jon Skeetは毎回新しい接続を作成することを推奨しました。なぜだろう? – KyloRen

+0

@KyloRen接続プールはアプリドメインごとであるため、 – Massanu

+1

@KyloRenのフレームワークがあなたのための接続管理を担当するため、「オープン後期、早期クローズ」パターンのスケーラビリティが向上します。これにより、クラスターの複数のインスタンスだけでなく、データベース・サーバー上のリソース使用量が削減されます。 –

2

私は彼が意味することは、オープンしているグローバル接続オブジェクトを保持しないことだと思います。ただし、必要なときにSqlConnectionを作成し、その時点で必要なすべてのクエリ(各クエリごとに1つの接続ではない)を実行してから、接続を閉じる必要があります。

したがって、実行する必要のあるクエリがたくさんある場合は、それぞれに1つのSQL接続が必要ではなく、1つだけで十分です。しかし、たとえばユーザーがボタンをクリックするたびにクエリを実行している場合は、クリックのたびに接続を開くほうがよいでしょう。そうすれば、接続の終了と処理をより簡単に管理できます。

関連する問題