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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾玉锋 高级黑马   /  2012-7-18 08:33  /  1929 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在读取数据(不管是读取数据库数据,还是对文件进行操作)的时候,因为涉及到链接的关闭和内存的释放,(我以前是自己关闭链接释放内存)老师建议是用
using模块,以免出现异常或者忘操作。在这里有一点疑惑,求解。

....
string constr="....";//这里是链接字符串
using(Sqlconnection cnn=new Sqlconnection(constr))
{
        cnn.open();//打开数据库
        using(SqlCommand cmm=cnn.creadCommand()){
                cmm.commandText="";//
                cmm.excuteNonQuery();
        }
}

在这里我有一点没明白,Sqlconnection 实例和 SqlCommand实例等不放在同一个using(){}里,而要对每一个实例用using(){}操作。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

7 个回复

倒序浏览
1,C#允许 using对链接的关闭和内存的释放时侯进行嵌套使用;
2,采用using(){}对不同的实例进行处理,提高代码的安全性和可靠性;
3,当程序出现异常时候,由于使用了using会自动释放数据库链接。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
没创建一个实例,并实现了IDisposable接口,在用完之后都要别释放(在这个大花括号结束时),而using(Sqlconnection cnn=new Sqlconnection(constr))只释放括号里的这个接口。
所以要创建一个实例(实现IDisposable的),就要using一下。
希望对你有帮助!!

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2012-7-18 08:48
1,C#允许 using对链接的关闭和内存的释放时侯进行嵌套使用;
2,采用using(){}对不同的实例进行处理,提高 ...

谢谢!不过我不明白的是,可以全都放在一个using{}块里面么?而不是用多个using{}
回复 使用道具 举报
赵学辉 发表于 2012-7-18 10:01
没创建一个实例,并实现了IDisposable接口,在用完之后都要别释放(在这个大花括号结束时),而using(Sqlco ...

恩,谢谢。再问一下,一个using{}只能释放一个实现了IDisposable的实例么?
回复 使用道具 举报
曾玉锋 发表于 2012-7-18 10:07
谢谢!不过我不明白的是,可以全都放在一个using{}块里面么?而不是用多个using{} ...

using只能针对某一操作,还不能实现多个链接的关闭和释放数据库链接
回复 使用道具 举报
许庭洲 发表于 2012-7-18 10:23
using只能针对某一操作,还不能实现多个链接的关闭和释放数据库链接

明白了,多谢。
回复 使用道具 举报
曾玉锋 发表于 2012-7-18 10:09
恩,谢谢。再问一下,一个using{}只能释放一个实现了IDisposable的实例么?

嗯,就是在括号里创建的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马