我知道可能有一个明显的原因,但我找不到它..
我通常using
在数据库连接和数据读取过程中使用该语句,但我不能使用它,DataAdapter
因为它没有实现IDisposable
.
另外:填充数据集后它的行为如何?
它会自行关闭连接吗?
只关闭它还是丢弃它?
数据集填充后是否必须自己处理内部连接?如果是这样,为什么IDataAdapter
没有相关的属性/方法?
我知道可能有一个明显的原因,但我找不到它..
我通常using
在数据库连接和数据读取过程中使用该语句,但我不能使用它,DataAdapter
因为它没有实现IDisposable
.
另外:填充数据集后它的行为如何?
它会自行关闭连接吗?
只关闭它还是丢弃它?
数据集填充后是否必须自己处理内部连接?如果是这样,为什么IDataAdapter
没有相关的属性/方法?
DataAdapter
实例不包含对非托管代码的引用。它只是充当命令和数据集之间的“桥梁”。
DataAdapter 充当 DataSet 和数据源之间的桥梁,用于检索和保存数据。DataAdapter 通过映射Fill 和Update 来提供这个桥梁,Fill 改变DataSet 中的数据以匹配数据源中的数据,Update 改变数据源中的数据以匹配DataSet 中的数据。
来源:http: //msdn.microsoft.com/en-us/library/system.data.common.dataadapter.aspx
DataAdapter
不会关闭连接,因为您可能希望继续使用此连接来填充其他DataSets
.
Fill
例外情况是在调用方法之前连接未处于打开状态(Thanx Richard): https ://stackoverflow.com/a/2472886/2258
DataAdapter 没有实现 IDisposable,因为它没有任何需要在正常垃圾回收之外处理的成员变量。换句话说,它不需要实现 IDisposable。
如果您有兴趣,可以在这里查看 Mono DataAdapter 的源代码:http ://www.java2v.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Data/System/Data/通用/DataAdapter.cs.htm
一般来说,如果您要在使用后关闭连接,请继续将连接放在 using 范围内,但也可以使用单例并在使用相同连接的多方范围内拥有多方 DataAdapter。
希望这是有道理的。