Search code examples
c#.netconnection-poolingidisposablesqlconnection

Best practice for reusing SqlConnection


I've come from Java experience and am trying to start with C#. I've read SqlConnection SqlCommand SqlDataReader IDisposable and I can understand that the best practice to connecting to a DB is wrapping SqlConnection, SqlCommand and SqlDataReader in their own using block.

But in Java we use to encapsulate the connection into a factory method, create it only once, and reuse it for all queries, even multithreaded ones. Only statements and result sets are created for each query and closed ASAP.

Isn't creating a new SqlConnection for each query kinda overkill? Can't it be reused?


Solution

  • Creating a new instance of the class SqlConnection does not create a new network connection to SQL Server, but leases an existing connection (or creates a new one). .NET handles the physical connection pooling for you.

    When you have finished with your connection (through which you can send multiple queries) just Close() or Dispose() (or use a using{} block preferably).

    There is no need, and not good practise, to cache instances of the SqlConnection class.