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()方法?

using仅仅是对于括号中的对象在finally中自动dispose而已,而open和close的操作属于数据库连接的操作,需要手动执行。dispose是销毁对象的操作。在销毁对象时,如果连接为打开状态,会在销毁时自动关闭。
要明确知道数据库操作和对象操作的区别。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不是自动释放连接对象吗?的主要内容,如果未能解决你的问题,请参考以下文章

详细说一下C#中using自动释放资源的用法

mybatis会自动释放dblink连接吗

我应该在重新分配之前调用分配给保留属性的自动释放对象的释放吗?

c# using的疑问

@property(保留)是不是自动释放或释放对象?

具有大量自动释放对象的线程如果是/否,在这种情况下是不是必须使用自动释放池,为啥?