using不是自动释放连接对象吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了using不是自动释放连接对象吗?相关的知识,希望对你有一定的参考价值。
using (SqlConnection conn = new SqlConnection(strConn))
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = type;
try
conn.Open();
return cmd.ExecuteNonQuery();
catch
throw new Exception("数据库操作出现错误");
finally
if (conn.State == ConnectionState.Open)
conn.Close();
using不是自动释放连接对象吗?不是自动打开 自动关闭吗?
那这里怎么还写了 open()和close()方法?
要明确知道数据库操作和对象操作的区别。Dispose是在C#的.net平台中的一种模式,Dispose设计模式,用来销毁对象
using的语句相当于try finally.
你的代码在编译后会翻译成:
SqlConnection conn = null;
try
conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = type;
try
conn.Open();
return cmd.ExecuteNonQuery();
catch
throw new Exception("数据库操作出现错误");
finally
if (conn.State == ConnectionState.Open)
conn.Close();
finally conn.dispose(); 参考技术A using的语句相当于try finally.
你的代码在编译后会翻译成:
SqlConnection conn = null;
try
conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = type;
try
conn.Open();
return cmd.ExecuteNonQuery();
catch
throw new Exception("数据库操作出现错误");
finally
if (conn.State == ConnectionState.Open)
conn.Close();
finally conn.dispose();
我手敲的,没有格式..
using仅仅是对于括号中的对象在finally中自动dispose而已,而open和close的操作属于数据库连接的操作,需要手动执行。dispose是销毁对象的操作。在销毁对象时,如果连接为打开状态,会在销毁时自动关闭。
要明确知道数据库操作和对象操作的区别。Dispose是在C#的.net平台中的一种模式,Dispose设计模式,用来销毁对象本回答被提问者采纳 参考技术B 为了避免你头晕,我再解释一下。using 负责将这个对象本身销毁,但是并不代表能够帮助这对象代劳具体的操作(比如连接数据库或者关闭数据库)。就好像它可以把一只手机给分解了,而不会负责帮你打电话或者挂电话。 参考技术C using不是自动打开的,要显式open,同时也不是自动关闭而是调用Dispose 方法。第一时间关闭连接也是正确的,是规范写法。 参考技术D using只是引用或者使用对象,说明这是一个方法或者对象的开始,并不是一个特定的方法,所以不可能释放对象的,这只是一个修饰符号而已
访问数据库
1.using 语句有两个作用:
①作为关键字,using可以导入命名空间
②作为C#语句,using可以释放对象占用的内存资源
2.既然using可以释放对象,那么是不是在所有的对象前都可以用using来限制呢?
并不是这样的,原因如下:
①using可以主动释放的对象都需要实现IDisable接口
②即使都实现了IDisable接口,也没有必要全部使用using.
我们只对那些对系统性能有重要影响的对象进行using限定,而其他的对象可以交给垃圾回收器处理
3.SqlParameter类的常用属性
以上是关于using不是自动释放连接对象吗?的主要内容,如果未能解决你的问题,请参考以下文章