有谁知道 SqlDataAdapter.Dispose 方法是否实际关闭或处置任何 SqlConnections?我加载了 Reflector,发现 SqlDataAdapter 继承自 DbDataAdapter。如果我反汇编并查看该类中的 dispose 方法,似乎没有任何 SqlConnections 的处置。我想我可以为此编写一个测试,但我想我会问一下是否有人对此有任何见解。
首先要注意的是,DataAdapter 在某些情况下会管理和关闭您的连接。例如,如果您使用 DataAdapter,您可能正在使用 DataTable/DataSet 进行操作.Fill()
and .Update()
功能。
来自.Fill() docs https://learn.microsoft.com/en-us/dotnet/api/system.data.common.dataadapter.fill:
与 SELECT 语句关联的连接对象必须有效,但不需要打开。如果连接在调用 Fill 之前关闭,则会打开该连接以检索数据,然后关闭。如果连接在调用 Fill 之前打开,它将保持打开状态。
The .Update() docs https://learn.microsoft.com/en-us/dotnet/api/system.data.common.dataadapter.update根本不提及任何有关连接的内容,因此我希望需要手动管理它。
您具体询问了Dispose()
方法。喜欢Update()
, the Dispose() docs http://msdn.microsoft.com/en-us/library/3cc9y48w.aspx没有具体提及连接,所以我希望需要手动关闭它。
最后,我们可以稍微改进 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)