There seems to be a lot of confusion about how to clean up after using a SqlConnection object. Should you call Close(), Dispose(), Close() then Dispose(), or neither?
Here are some relevant facts we need to consider:
When an open SqlConnection goes out of scope, its underlying physical database connection will not be closed or returned to the connection pool by the garbage collector;
Dispose() always calls Close() implicitly;
Dispose() clears the ConnectionString, Close() does not;
In future versions of ADO.NET, the SqlConnection.Dispose method might free other unmanaged resources, in addition to the database connection.
What conclusions can we draw?
We must at least call Close() or Dispose(), otherwise the database connection won't be released;
There's no need to call both Close() and Dispose();
If we're going to open the connection again, we should Close() not Dispose();
When we're completely finished with the SqlConnection, we should call Dispose() to make sure that all unmanaged resources are released, both now and in the future.
The tempation of symmetry after calling Open() is to always call Close(), as was the case in classic ADO, but I've shown that in the case of SqlConnection we only need to call Dispose(). Better still, make sure Dispose() is always called implicitly by enclosing your SqlConnection objects in a using statement.
原文连接:http://chrisfulstow.blogspot.com/2006/11/sqlconnection-close-or-dispose.html
con.close() 是关闭连接,实际上是把连接放回ado.net的连接池,并没有真正关闭,所以再次连接时只是把连接从池中拿出来用,速度很快。
con.dispose是用来释放对象的所在内存,相对于new sqlconnection();
只用dispose是不能关闭connection的,两者不是一回事,只用close也不能释放它所占的内存。
conn.dispose() 是销毁连接,彻底关闭。
本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/16923.htm
分享到:
相关推荐
### ASP.NET中SqlConnection的Con.Close与Con.Dispose的区别 在ASP.NET开发过程中,处理数据库连接是一项基本且重要的工作。为了确保应用程序能够高效、安全地运行,理解`SqlConnection`类中的`Close`方法与`...
connection.Close(); } ``` 在使用SqlConnection对象时,要注意几个重要的点: 1. **连接池**:.NET框架使用连接池技术来管理SqlConnection对象,可以有效减少打开和关闭数据库连接的开销。当连接关闭时,它会返回...
本测试着重探讨了两种关闭数据库连接的方法:`Close`方法和`Dispose`方法,并在之后重新打开连接进行验证。下面我们将详细解释这两种方法及其在实际应用中的差异。 首先,`Close`方法是SqlConnection类提供的一个...
例如,`SqlConnection`的`Close`方法只是关闭连接,但并未解除对连接对象的引用,因此可以通过`Open`再次打开连接。而`Dispose`方法的目的是释放对象占用的所有资源,包括托管和非托管资源,并标记对象为无用,以便...
在Delphi编程环境中,连接MySQL数据库通常涉及到使用`SQLConnection`组件,这是一个强大的数据库连接工具,支持多种数据库引擎,包括MySQL。本篇文章将详细介绍如何在Delphi中利用`SQLConnection`来连接MySQL数据库...
《SQLConnection:C++14封装的数据库连接库》 在现代软件开发中,数据库扮演着至关重要的角色,用于存储和管理数据。SQLConnection是一个专为C++开发者设计的库,它封装了SQLite、MySQL和PostgreSQL这三种常用...
connection.Close(); ``` 除了基本的打开和关闭连接,SqlConnection还支持执行SQL命令。例如,使用SqlCommand类创建一个SQL命令对象,设置其CommandText属性为SQL语句,然后通过SqlConnection执行: ```csharp ...
SqlServer 数据库 连接助手 [全局]--打开数据库,传递参数无;返回参数:SqlConnection MyData_Mydb
自己常用的C# Database 类。包括 SqlConnection,SqlCommand,SqlDataReader 的使用
sqlConnection对象,教你如何学会sqlConnection的操作。。仅仅收1分,回复即可取回。。全部是自己手写的
- **SqlConnection 类**: `SqlConnection` 是用于连接 SQL Server 数据库的类。 - 示例中的 `SqlConnection con;` 定义了一个 `SqlConnection` 对象,用于后续的数据库连接操作。 - 使用 `ConfigurationManager....
sqlConnection.Close(); } public void UseSqlStoredProcedure() { SqlConnection sqlConnection = new SqlConnection(sqlConnectionCommand); SqlCommand sqlCommand = new SqlCommand();...
- Dispose():释放SqlConnection占用的所有资源,并将其设置为null。 SqlCommand类用于执行SQL命令或存储过程。创建SqlCommand对象时,可以指定SQL语句或存储过程名称,以及与之关联的SqlConnection对象。例如: `...
sqlConnection.Close(); } ``` **关键点解析:** 1. **连接字符串**:通过`SqlConnection`创建一个连接对象,并使用连接字符串`sqlConnectionCommand`来指定数据库服务器地址、数据库名称、用户名和密码。 2. **...
SqlConnection myCon = new SqlConnection(str_sqlcon); return myCon; } ``` **关键知识点:** - **ConnectionString(连接字符串)**: `"DataSource=hwj;InitialCatalog=shangbiao;IntegratedSecurity=True"` ...
在Windows Forms(Winform)开发中,`CommandBehavior.CloseConnection`是一个重要的概念,它涉及到数据库操作和ADO.NET组件的使用。在.NET Framework中,我们通常使用ADO.NET来连接和交互数据库,而`...
1. Close() - 关闭与数据库的连接。 2. CreateCommand() - 创建一个与SqlConnection关联的SqlCommand对象,用于执行SQL命令。 3. Open() - 打开到数据库的连接。 同时,SqlConnection还有两个事件: 1. StateChange...
sqlConnection.Close(); } ``` 这段代码创建了一个SqlConnection,设置SqlCommand的CommandType为Text,然后执行SQL查询(sqlSelectCommand)。当数据读取完成后,使用SqlDataReader的Read方法逐行读取结果,然后...
当我们调用Close或者Dispose方法时,实际并不断开连接,而是把连接放回连接池,再次使用时候重连接池中取得空闲资源。因为打开和关闭数据库连接开销比较大,所以连接池对于与数据库链接资源的控制上,加快客户端程序...