为什么DataAdapter不是Disposable

时间:2012-11-29 15:43:40

标签: c# .net database-connection dataadapter

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

我通常在数据库连接和数据读取期间使用using语句,但我无法在DataAdapter上使用它,因为它没有实现IDisposable。< / p>

另外:填充数据集后它的表现如何?

它是否关闭了连接?

只关闭它或处理它?

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

  

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

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

答案 2 :(得分:2)

DataAdapter不实现IDisposable,因为它没有任何需要在正常垃圾收集之外处理的成员变量。换句话说,它不需要实现IDisposable。

如果您有兴趣,可以在此处查看Mono DataAdapter的源代码:http://www.java2v.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Data/System/Data/Common/DataAdapter.cs.htm

一般情况下,如果要在使用后关闭连接,请继续将连接放在使用范围内,但也可以使用单一连接并使用相同的连接在多个范围内使用多个DataAdapter。

希望这是有道理的。