有谁知道SqlDataAdapter.Dispose方法是否实际关闭或处置任何SqlConnections?我加载了Reflector,我发现SqlDataAdapter继承自DbDataAdapter.如果我反汇编并查看该类中的dispose方法,似乎没有任何SqlConnections的处理.我想我可以为此写一个测试,但我想我会问是否有人对此有任何见解.
首先要注意的是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%我得到了适配器的初始化语法,但是我直接在回复窗口中输入了它.如果需要,我稍后会修复它.