I want to close the SqlConnection in the Finally since the using not really close it and the connection pool gets full. but I don't realize what's the right way to fo that since the conn object isn't reachable any more in the finally section.
try
{
using (var conn = new SqlConnection(_dbconnstr))
{
//...
}
}
catch (Exception ex)
{
//...
}
finally
{
conn.Close //?!?!?!?!???
}
using (var conn = new SqlConnection(_dbconnstr))
{
//code
}
is expaded to:
SqlConnection conn = new SqlConnection(_dbconnstr);
try
{
//code
}
finally
{
conn.Dispose();
}
So you should handle errors but you can forget about closing connection.
You don't need to close conn
in the finally
block. The using
block will handle closing the connection for you. (In fact, you probably don't need the try...finally
at all in this case, unless you have other resources that need dealing with in the finally
.)
The using
block will translate to something like this:
var conn = new SqlConnection(/*...*/);
try
{
// ...
}
finally
{
if (conn != null)
((IDisposable)conn).Dispose();
}
The Dispose
method of the SqlConnection
object will be called in the finally
block, and the Dispose
method goes on to call Close
for you.
Exiting a using block calls .Dispose()
on the object, for a SqlConnection
will close the connection and any open resources.
So the try
, finally
block is not needed.
AFAIK, the following using statement:
using (var conn = new SqlConnection(_dbconnstr))
{
}
Is equivalent to:
SqlConnection conn;
try
{
//`using` scope operations are executed here
conn = new SqlConnection(_dbconnstr));
}
catch
{
//exceptions are bubbled
throw;
}
finally
{
//Dispose is always called
conn.Dispose();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With