using 语句会关闭其中的所有类型的流吗?

Does using statement close all kinds of streams in it?

提问人:zaraboy 提问时间:2/10/2023 最后编辑:Tim Schmelterzaraboy 更新时间:2/10/2023 访问量:42

问:

我有声明要关闭,然后我正在与读者合作。 我想知道我是否必须在最后关闭阅读器,或者我可以依靠语句来关闭它。usingOleDbConnectionusing

我有以下代码:

string connectionString = @"Some connection"; 
using (OleDbConnection connection = new OleDbConnection(connectionString)) 
{ 
    string query = "SELECT ID, Name, \[Position\] FROM Players"; 
    OleDbCommand command = new OleDbCommand(query, connection); 
    connection.Open(); 
    OleDbDataReader reader = command.ExecuteReader(); 

    while (reader.Read()) 
    { 
        Console.WriteLine($"ID.{reader\[0\]} {reader\[1\],-18}{reader\[2\]}"); 
    } 
    reader.Close(); 
}
C# oledbConnection 使用语句

评论

0赞 Ralf 2/10/2023
您需要自己调用 Dispose(通过使用 using 模式)。对于读者和命令。
0赞 Steve 2/10/2023
当连接关闭时,会自动关闭数据读取器。因此,不需要仅仅为了关闭阅读器而添加一个 use。但。规则很明确。如果类实现 IDisposable 接口,则应释放。

答:

4赞 Tim Schmelter 2/10/2023 #1

根据经验:

将 -statement 用于实现 的所有内容。usingIDisposable

所以是的,将 also 用于 和 .usingOleDbDataReaderOleDbCommand

但你可以把所有的事情简化为:

using var connection = new OleDbConnection(@"Some connection");
using var command = new OleDbCommand("SELECT ID, Name, Position FROM Players", connection);
connection.Open();
using OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    Console.WriteLine($"ID.{reader[0]} {reader[1],-18}{reader[2]}");
}

评论

0赞 zaraboy 2/11/2023
Tim Schmelter,您使用的是哪种语言版本的 C#?因为这种“使用 var 连接”的构造不起作用?
0赞 Tim Schmelter 2/11/2023
@zaraboy 自 VS 2019 以来已经可用,只需使用 C#8