In the example below, is the connection going to close and disposed when an exception is thrown if it is within a using statement?
using (var conn = new SqlConnection('...')) { conn.Open(); // stuff happens here and exception is thrown... }
I know this code below will make sure that it does, but I’m curious how using statement does it.
var conn; try { conn = new SqlConnection('...'); conn.Open(); // stuff happens here and exception is thrown... } // catch it or let it bubble up finally { conn.Dispose(); }
Related:
What is the proper way to ensure a SQL connection is closed when an exception is thrown?
Yes,
usingwraps your code in a try/finally block where thefinallyportion will callDispose()if it exists. It won’t, however, callClose()directly as it only checks for theIDisposableinterface being implemented and hence theDispose()method.See also: