try catch和using问题

图片说明

如果出现错误的话,try catch捕获异常后,using还会释放到资源吗?

finally了解一下,程序都终止了,咋么释放

using也是try finally的组合 会先释放 再去到catch,是这样吗?

using只是语法糖,上面的代码相当于:
try
{
SqlConnection conn = new SqlConnection(...);
.....
.....
conn.Dispose();//编译器自己帮你调用Dispose()方法
}
catch(Exception ex)
{
}

using只是帮你在花括号内的代码执行完毕后调用了一下对象的Dispose()方法罢了,所以如果在花括号里面就发生了异常,那么是执行不到Dispose()方法的,更直接的方法看是否会释放就去IL反汇编一下,看下释放资源的代码会不会执行

两种方式:
1. 将SqlConnection conn声明放到try上面,保证错误时也能拿到实例,之后在finally的时候调用去dispose;
2. using里面再弄个try-catch,当然,会有些臃肿;但一般来说,ADO.NET访问数据库的这里,不需要用try-catch去包起来,而应该从业务层去包try-catch;