当我从我的 c# 代码中查询数据库时,我通常使用类似这样的结构:
using (var connection = new OleDbConnection(connStr))
using (var command = new OleDbCommand(query, connection))
using (var adapter = new OleDbDataAdapter(command))
{///}
我是否应该实际使用所有这些“使用”,或者仅处理连接就足够了,所有相关对象也将被处理?
当我从我的 c# 代码中查询数据库时,我通常使用类似这样的结构:
using (var connection = new OleDbConnection(connStr))
using (var command = new OleDbCommand(query, connection))
using (var adapter = new OleDbDataAdapter(command))
{///}
我是否应该实际使用所有这些“使用”,或者仅处理连接就足够了,所有相关对象也将被处理?
仅处理连接就足够了,所有相关对象也将被处理?
不会。处理连接只会处理连接对象。
通常,处置每个实现的对象是一种安全的做法IDisposable。(还有一点,disposing Commandobject 不会dispose相关的连接对象)
using 语句只配置包含的实例。它不会影响与之相关的其他对象。
你在你的情况下使用正确的方法。
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) answer:在using语法后面,编译器创建了一个作用域,在该作用域中创建了变量(该变量在作用域之外不存在using),并且Dispose在退出作用域时将调用该方法using。
因此,如果您不在块中创建command变量,则不会调用using该Dispose方法,因此不会释放该对象。(除非你决定给command.Dispose()自己打电话)