A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵威 中级黑马   /  2013-5-2 16:40  /  1634 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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的话,客户端还能读取到数据么?

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

6 个回复

倒序浏览
因为读取DataSet是读取全部数据,DataSet类似于一张临时表。
因此在操作完之后,关闭即可。
:)
回复 使用道具 举报
这个可以的因为你DataSet相当于里面已经把数据库里面的值查询出来放在里面了,所以你关掉的话,值在DataSet里面已经有了。
回复 使用道具 举报
(1)using语句:定义一个范围,在范围结束时处理对象。
当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。
要达到这样的目的,用try...catch来捕捉异常也是可以的,用using也很方便。
这就是使用using的原因;
(2)如果释放掉conn和da,客户端还是可以读到数据的,因为你已经把读出来的数据放到你new的dataset里了。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
1、使用using语句,可以使我们在处理程序时,不必担心资源释放问题,在using语句结束后,系统会自动为我们释放资源,而达到我们只需要注重程序内部实现问题的目的。使用using语句最终生成的其实就是一个try, finally代码块,在finally代码块里释放资源。
2、如果释放掉conn和da,客户端可以读取到数据,但是和3楼不同的是,不是因为读出来的数据放入dataset里面了,而是被return到接收你这个函数返回值的DataTable结构中了。3楼说的dataset结构在return完毕后也是要销毁的。
回复 使用道具 举报
ADO.Net中的连接等资源都实现了IDisposable接口,可以使用using进行资源管理
回复 使用道具 举报
Net中的连接等资源都实现了IDisposable接口,可以使用using进行自动资源管理,
那是程序使用完才释放掉的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马