3

我知道可能有一个明显的原因,但我找不到它..

我通常using在数据库连接和数据读取过程中使用该语句,但我不能使用它,DataAdapter因为它没有实现IDisposable.

另外:填充数据集后它的行为如何?

它会自行关闭连接吗?

只关闭它还是丢弃它?

数据集填充后是否必须自己处理内部连接?如果是这样,为什么IDataAdapter没有相关的属性/方法?

4

3 回答 3

3

DataAdapter实例不包含对非托管代码的引用。它只是充当命令和数据集之间的“桥梁”。

DataAdapter 充当 DataSet 和数据源之间的桥梁,用于检索和保存数据。DataAdapter 通过映射Fill 和Update 来提供这个桥梁,Fill 改变DataSet 中的数据以匹配数据源中的数据,Update 改变数据源中的数据以匹配DataSet 中的数据。

来源:http: //msdn.microsoft.com/en-us/library/system.data.common.dataadapter.aspx

于 2012-11-29T15:56:44.757 回答
3

DataAdapter不会关闭连接,因为您可能希望继续使用此连接来填充其他DataSets.

Fill例外情况是在调用方法之前连接未处于打开状态(Thanx Richard): https ://stackoverflow.com/a/2472886/2258

于 2012-11-29T15:52:46.573 回答
2

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。

希望这是有道理的。

于 2012-11-29T16:02:55.253 回答