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?
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.