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

Pag*_*age 9 .net ado.net

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

Joe*_*orn 10

首先要注意的是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
Run Code Online (Sandbox Code Playgroud)

或者在C#中:

using (SqlConnection conn = new SqlConnection(""))
using (SqlDataAdapter adapter = new SqlDataAdapter() {Connection = conn})
{
    // Do stuff
}
Run Code Online (Sandbox Code Playgroud)

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