配置连接、命令、适配器

Disposing connection, command, adapter

当我从我的 C# 代码查询数据库时,我通常使用类似这样的结构:

using (var connection = new OleDbConnection(connStr))
using (var command = new OleDbCommand(query, connection))
using (var adapter = new OleDbDataAdapter(command))
{///}

我应该实际使用所有这些 'using' 还是仅处理连接就足够了,所有相关对象也将被处理?

it will be enough to dispose only connection and all related objects will be disposed too?

没有。处置连接只会处置连接对象。

通常,销毁每个实现 IDisposable 的对象是一种安全的做法。 (还有一点,处理Command对象不会处理相关的连接对象)

仅使用语句配置包含的实例。它不会影响相关的其他对象。

你在你的情况下使用了正确的方法。

using (var connection = new OleDbConnection(connStr))
using (var command = new OleDbCommand(query, connection))
using (var adapter = new OleDbDataAdapter(command))
{

} // <-- Both connection, command and adapter disposed here

简短回答:不,这只会处理您的连接对象。因此,您需要所有这些 using

Long(er) 答案:在 using 语法后面,编译器创建一个范围,在该范围内创建变量(变量不存在于 using 范围之外)和Dispose 方法将在退出 using 作用域时被调用。

因此,如果您不在 using 块中创建 command 变量,则不会调用 Dispose 方法,因此不会释放该对象。 (除非你决定自己打电话给 command.Dispose()