黑马程序员技术交流社区

标题: 这里为什么可以使用using了???? [打印本页]

作者: 赵威    时间: 2013-5-2 16:40
标题: 这里为什么可以使用using了????
public static DataTable ExecuteDataSet(string sql, params SqlParameter[] parameters)
        {
            //定义一个连接
            using (SqlConnection conn = new SqlConnection(connString))
            {
                //定义一个SqlDataAdapter变量da
                using (SqlDataAdapter da = new SqlDataAdapter(sql, conn))
                {
                    conn.Open();
                    da.SelectCommand.Parameters.AddRange(parameters);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    return ds.Tables[0];
                }
            }
        }

问题:这里为什么可以用using了,如果释放掉conn和da的话,客户端还能读取到数据么?

作者: 陈晖    时间: 2013-5-2 16:47
因为读取DataSet是读取全部数据,DataSet类似于一张临时表。
因此在操作完之后,关闭即可。
:)
作者: 一直在路上    时间: 2013-5-2 17:00
这个可以的因为你DataSet相当于里面已经把数据库里面的值查询出来放在里面了,所以你关掉的话,值在DataSet里面已经有了。
作者: 高文咪    时间: 2013-5-2 17:12
(1)using语句:定义一个范围,在范围结束时处理对象。
当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
要达到这样的目的,用try...catch来捕捉异常也是可以的,用using也很方便。
这就是使用using的原因;
(2)如果释放掉conn和da,客户端还是可以读到数据的,因为你已经把读出来的数据放到你new的dataset里了。
作者: 张伟86    时间: 2013-5-3 01:20
1、使用using语句,可以使我们在处理程序时,不必担心资源释放问题,在using语句结束后,系统会自动为我们释放资源,而达到我们只需要注重程序内部实现问题的目的。使用using语句最终生成的其实就是一个try, finally代码块,在finally代码块里释放资源。
2、如果释放掉conn和da,客户端可以读取到数据,但是和3楼不同的是,不是因为读出来的数据放入dataset里面了,而是被return到接收你这个函数返回值的DataTable结构中了。3楼说的dataset结构在return完毕后也是要销毁的。
作者: 许庭洲    时间: 2013-5-5 07:09
ADO.Net中的连接等资源都实现了IDisposable接口,可以使用using进行资源管理
作者: net七期王雷    时间: 2013-5-5 16:28
Net中的连接等资源都实现了IDisposable接口,可以使用using进行自动资源管理,
那是程序使用完才释放掉的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2