当前位置:  开发笔记 > 编程语言 > 正文

SqlDataAdapter.Dispose实际关闭关联的SqlConnection吗?

如何解决《SqlDataAdapter.Dispose实际关闭关联的SqlConnection吗?》经验,为你挑选了1个好方法。

有谁知道SqlDataAdapter.Dispose方法是否实际关闭或处置任何SqlConnections?我加载了Reflector,我发现SqlDataAdapter继承自DbDataAdapter.如果我反汇编并查看该类中的dispose方法,似乎没有任何SqlConnections的处理.我想我可以为此写一个测试,但我想我会问是否有人对此有任何见解.



1> Joel Coehoor..:

首先要注意的是DataAdapter在某些情况下会管理和关闭您的连接.例如,如果您使用的是DataAdapter,则可能使用.Fill()和.Update()函数在DataTables/DataSet上运行.

来自.Fill()文档:

与SELECT语句关联的连接对象必须有效,但不需要打开它.如果在调用Fill之前关闭连接,则会打开它以检索数据,然后关闭.如果在调用Fill之前连接已打开,则它将保持打开状态.

该.Update()文档不要提有关连接任何东西,所以我期望需要手动管理.

现在你具体询问了Dispose()方法.与Update一样,Dispose()文档没有特别提到连接,所以我希望需要手动关闭它.

最后,我们可以稍微改进Bob King的代码:

Using conn as New SqlConnection(""), _
      adapter as New SqlDataAdapter() With {.Connection = conn}
    'Do stuff
End Using

或者在C#中:

using (SqlConnection conn = new SqlConnection(""))
using (SqlDataAdapter adapter = new SqlDataAdapter() {Connection = conn})
{
    // Do stuff
}

不是100%我得到了适配器的初始化语法,但是我直接在回复窗口中输入了它.如果需要,我稍后会修复它.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有