黑马程序员技术交流社区

标题: 关于using,求解惑! [打印本页]

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

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

在这里我有一点没明白,Sqlconnection 实例和 SqlCommand实例等不放在同一个using(){}里,而要对每一个实例用using(){}操作。
作者: 许庭洲    时间: 2012-7-18 08:48
1,C#允许 using对链接的关闭和内存的释放时侯进行嵌套使用;
2,采用using(){}对不同的实例进行处理,提高代码的安全性和可靠性;
3,当程序出现异常时候,由于使用了using会自动释放数据库链接。
作者: 赵学辉    时间: 2012-7-18 10:01
没创建一个实例,并实现了IDisposable接口,在用完之后都要别释放(在这个大花括号结束时),而using(Sqlconnection cnn=new Sqlconnection(constr))只释放括号里的这个接口。
所以要创建一个实例(实现IDisposable的),就要using一下。
希望对你有帮助!!
作者: 曾玉锋    时间: 2012-7-18 10:07
许庭洲 发表于 2012-7-18 08:48
1,C#允许 using对链接的关闭和内存的释放时侯进行嵌套使用;
2,采用using(){}对不同的实例进行处理,提高 ...

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

恩,谢谢。再问一下,一个using{}只能释放一个实现了IDisposable的实例么?
作者: 许庭洲    时间: 2012-7-18 10:23
曾玉锋 发表于 2012-7-18 10:07
谢谢!不过我不明白的是,可以全都放在一个using{}块里面么?而不是用多个using{} ...

using只能针对某一操作,还不能实现多个链接的关闭和释放数据库链接
作者: 曾玉锋    时间: 2012-7-18 10:33
许庭洲 发表于 2012-7-18 10:23
using只能针对某一操作,还不能实现多个链接的关闭和释放数据库链接

明白了,多谢。
作者: 赵学辉    时间: 2012-7-18 11:09
曾玉锋 发表于 2012-7-18 10:09
恩,谢谢。再问一下,一个using{}只能释放一个实现了IDisposable的实例么?

嗯,就是在括号里创建的。




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