using(){},Close(),Dispose()的区别

//用Close(),Dispose()方式关闭连接
string connString = "Data Source=(local);Initial Catalog=Linq;Integrated Security=SSPI";
SqlConnection conn = new SqlConnection(connString);
conn.Open();
conn.Close();
conn.Dispose();

//用using方式关闭连接
string connString = "Data Source=(local);Initial Catalog=Linq;Integrated Security=SSPI";//用windows用户登录
using (SqlConnection conn = new SqlConnection(connString))
{
    conn.Open();
}
Close()以后还能打开;Dispose()相当于清除,之后就不能再打开了;用using(){}的方式:在出了作用域以后就会调用Dispose(),SqlConnection、FileStream等的Dispose()内部会先做判断,如果没有Close()则会先调用Close()再执行Dispose(),所以用using(){}相当于try{  //do something.} finally{  Close();  Dispose()}这一点我们通过反编译SqlConnection类的Dispose()方法查看源代码也可以确定:

				
时间: 2024-10-20 05:56:57

using(){},Close(),Dispose()的区别的相关文章

深入解析Close()和Dispose()的区别

很多人都认为Close()方法内部会调用Dispose()方法,所以并没有本质的区别!实际上这个看法不是很准确,对有 些类来说,的确Close()和Dispose()没有本质区别,但是对有些类来说并非如此!首先,让我们看看我们最常使用的SqlConnection的Close()方法和Dispose()方法的区别:SqlConnection类的Dispose()方法是继承于Component类的,源代码是这样的:        public void Dispose() {            

关于C#的垃圾回收机制,Finalize和Dispose的区别(自认为很清晰了,有疑问的评论)

来到个新地方,新学习C#,前面看到C#的垃圾回收,Finalize和Dispose时,总是一知半解,迷迷糊糊.这次好了,前面连续两次面试问到这个问题,脑子里不是很清晰,加上用英文来表达,更是雪上加霜的感觉. 回来,好好看了相关资料,从网上看,总没有人能说的很清晰,往往很深奥的样子,拿了本<C# language 7.0>,这样中英文结合看,总算清晰了. 现在主要是找工作,没有时间写详细,先就说个重点: 1. 垃圾回收器GC负责托管对象的回收.GC通过应用根对象(如全局变量,静态变量等)能否访问

Interview

下面的题是供大家查漏补缺用的,真正的把这些题搞懂了,才能"以不变应万变". 回答问题的时候能联系做过项目的例子是最好的,有的问题后面我已经补充联系到项目中的对应的案例了. 1.简述 private. protected. public. internal 修饰符的访问权限.  private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内部和继承类中可以访问. public : 公共成员,完全公开,没有访问限制. internal: 当前程序集内可以访

c#笔试基础(转载)

技术类面试.笔试题汇总 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化,不要梦想着把题覆盖了,下面的题是供大家查漏补缺用的,真正的把这些题搞懂了,才能“以不变应万变”.回答问题的时候能联系做过项目的例子是最好的,有的问题后面我已经补充联系到项目中的对应的案例了. 1.简述 private. protected. public. internal 修饰符的访问权限. private : 私有成员, 在类的内部才可以

C#面向对象整理

一.里氏转换 (1)子类可以赋值给父类:如果有一个地方需要一个父类作为参数,我们可以给一个子类代替. (2)如果父类装的是子类对象,那么这个父类可以强转为子类对象. 二.值类型跟引用类型区别 1.在内存上存储的地方不一样. 值类型的值是存储在内存的栈当中.      引用类型的值是存储在内存的堆中.2.传递的方式不一样. 值类型我们称之为值传递, 引用类型我们称之为引用传递.3.我们学的值类型和引用类型: 值类型:int.double.bool.char.decimal.struct.enum

.net面试题1[转载]

1.简述private.protected.public.internal修饰符的访问权限. private:私有成员,在类的内部才可以访问. protected:保护成员,该类内部和继承类中可以访问. public:公共成员,完全公开,没有访问限制. internal:当前程序集内可以访问. 2.ADO.NET中的五个主要对象 Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的.Close和Dispose的区别,Close以后还可以

关于一家大型互联网公司的.NET面试

上周去了一家大型的互联网公司去面试!四个面试官提的问题整理下!以后会注明答案! 1.关于垃圾回收的过程!GC的过程 其中包含:什么是根,Finalize与Dispose的区别,什么时候用到!IDispose 接口中有什么哪些方法!Finalize方法里面可以释放托管资源吗? 2.什么时候使用值类型,什么时候使用引用类型? 3.对于new关键重新方法与override 重写的2个有什么不同? 4.关于接口与抽象类的区别,2个在什么场景里面使用?在实际开发中有没有使用过这2种区别? 5.类的继承对应

SQLServer汇总

数据库语言 DML(数据操作语言) select insert delete update DDL(数据定义语言--建表建库等) creat drop alter DCL(数据控制语言) grant revoke 数据库的简易流程(数据库客户端软件和数据库服务软件的执行流程) 安装时有一个客户端管理软件和一个服务器.我们平常操作的是客户端软件,发送脚本到服务器DMSM(数据库服务器),服务器分析和解析并展示执行结果. 主键的概念 唯一的标识一行数据操作 可以作为其他表的外键来引用 业务主键:有意

程序员级别鉴定书(.NET面试问答集锦)

作为一个.NET程序员,应该知道的不仅仅是拖拽一个控件到设计时窗口中.就像一个赛车手,一定要了解他的爱车 – 能做什么不能做什么. 本文参考Scott Hanselman给出的.NET问题列表,整理如下.包括WinForms,ASP.NET,XML以及C#和.NET基础相关的问题,有兴趣的自我检测一下吧- 参考答案另附在文章末尾,由于水平有限,难免有谬误,欢迎指正. 所有号称会写代码的人 进程和线程之间的区别? 什么是Windows服务,它的生命周期与标准的EXE程序有什么不同? Windows