1

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

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

我是否应该实际使用所有这些“使用”,或者仅处理连接就足够了,所有相关对象也将被处理?

4

3 回答 3

3

仅处理连接就足够了,所有相关对象也将被处理?

不会。处理连接只会处理连接对象。

通常,处置每个实现的对象是一种安全的做法IDisposable(还有一点,disposing Commandobject 不会dispose相关的连接对象)

于 2015-03-04T15:09:31.163 回答
3

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
于 2015-03-04T15:11:55.797 回答
0

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

Long(er) answer:在using语法后面,编译器创建了一个作用域,在该作用域中创建了变量(该变量在作用域之外不存在using),并且Dispose在退出作用域时将调用该方法using

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

于 2015-03-04T15:22:44.340 回答