这是我的示例的简化版本:
using (DbCommand cmd = new SqlCommand("myProcedure", (SqlConnection)DataAccessHelper.CreateDatabase().CreateConnection()) { CommandType = CommandType.StoredProcedure })
{
cmd.Connection.Open();
using(IDataReader dr = cmd.ExecuteReader())
doWork(dr);
}
Run Code Online (Sandbox Code Playgroud)
处理命令时,连接是否已关闭?或者我是否需要首先使用语句进行连接,然后在闭包中创建命令?
Jam*_*are 11
如果希望阅读器关闭连接,可以使用ExecuteReader()的重载:
...
using (IDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
...
Run Code Online (Sandbox Code Playgroud)
默认情况下,配置阅读器不会释放连接.- 有关更多信息,请参阅MSDN ...
为了解决Close()vs 的问题Dispose(),MSDN声明:
如果DbConnection超出范围,则不会关闭.因此,您必须通过调用Close或Dispose显式关闭连接,这在功能上是等效的.
因此,不需要必须设置自闭合连接.主要区别在于可以重新打开关闭的连接,但是不能打开连接.这样做的主要附加工作Dispose()是设置内部,null因为连接超出范围,所以内部效果不会太大.
| 归档时间: |
|
| 查看次数: |
1032 次 |
| 最近记录: |