+ -
当前位置:首页 → 问答吧 → 新手提问

新手提问

时间:2011-12-13

来源:互联网

C# code
       using (ds = new DataSet())
            {
                da = new SqlDataAdapter(sql, StrConn);
                da.Fill(ds);
                return ds;
            }

            ds = new DataSet();
            da = new SqlDataAdapter(sql, StrConn);
            da.Fill(ds);
            return ds;

请问高手们这两种写法有什么区别?先谢过!

作者: f152520843   发布时间: 2011-12-13

你的结果应该是可以返回的,但在使用过程中注意的是,第一种ds的作用域在{}之间

作者: bdmh   发布时间: 2011-12-13

引用 1 楼 bdmh 的回复:
你的结果应该是可以返回的,但在使用过程中注意的是,第一种ds的作用域在{}之间

那除了作用域外没什么区别了吗?

作者: f152520843   发布时间: 2011-12-13

using 相当于try catch

作者: hefeng_aspnet   发布时间: 2011-12-13

ds自动释放

ds手动释放

作者: lvmeng0206   发布时间: 2011-12-13

引用 2 楼 f152520843 的回复:

引用 1 楼 bdmh 的回复:
你的结果应该是可以返回的,但在使用过程中注意的是,第一种ds的作用域在{}之间

那除了作用域外没什么区别了吗?

出了using作用域ds会释放掉,
相当调用了Dispose()

作者: ohkuy   发布时间: 2011-12-13

引用 3 楼 hefeng_aspnet 的回复:
using 相当于try catch

那出错怎么抛出异常?

作者: f152520843   发布时间: 2011-12-13

前者: 相当于 try ..catch..finally  

作者: xiaotiange   发布时间: 2011-12-13

去看下生成的IL代码块就明白了

作者: xiaotiange   发布时间: 2011-12-13

引用 5 楼 ohkuy 的回复:
引用 2 楼 f152520843 的回复:

引用 1 楼 bdmh 的回复:
你的结果应该是可以返回的,但在使用过程中注意的是,第一种ds的作用域在{}之间

那除了作用域外没什么区别了吗?

出了using作用域ds会释放掉,
相当调用了Dispose()

那第二段什么时候才会释放?

作者: f152520843   发布时间: 2011-12-13

使用Using代码块,可以自动调用ds的Dispose方法,而非try...catch...finally

作者: open24hours   发布时间: 2011-12-13

引用 10 楼 open24hours 的回复:
使用Using代码块,可以自动调用ds的Dispose方法,而非try...catch...finally


和7楼说的相反啊!

作者: f152520843   发布时间: 2011-12-13

前者一出了using块就立刻释放ds。而后者需要依靠.NET的垃圾回收机制来释放ds(具体释放时间是不好事先确定的)。这就是两种写法的主要区别。

作者: MicroStationFan   发布时间: 2011-12-13

引用 12 楼 microstationfan 的回复:
前者一出了using块就立刻释放ds。而后者需要依靠.NET的垃圾回收机制来释放ds(具体释放时间是不好事先确定的)。这就是两种写法的主要区别。
+++

作者: yanbuodiao   发布时间: 2011-12-13

引用 11 楼 f152520843 的回复:
引用 10 楼 open24hours 的回复:
使用Using代码块,可以自动调用ds的Dispose方法,而非try...catch...finally


和7楼说的相反啊!
至于这个是说前者 出现了异常 ds直接就释放掉了 相当于finally中调用了dispose
后者出现异常,如果没有捕获机制 直接报到界面上 然后由GC统一回收

作者: yanbuodiao   发布时间: 2011-12-13