while (reader.Read()) 会自动关闭吗?

rya*_*ton 2 c# sqldatareader

通常,当我用 C# 编码时,我要么采用SqlDataReader以下两种方式之一编写:

reader.Read();

if (reader.HasRows)
{
    // Code here
}

reader.Close();
Run Code Online (Sandbox Code Playgroud)

或者:

while (reader.Read())
{
    // Code here
}
Run Code Online (Sandbox Code Playgroud)

首先,我打开SqlDataReader并关闭它。第二个我只是reader.Read()在 while 循环中被调用。

我的问题是:reader.Read()读取所有数据后调用是否会自行关闭?或者我还应该打电话吗reader.Close()

Son*_*nül 6

读取所有数据后,调用 reader.Read() 是否会自行关闭?

No.Read()方法只是将光标移动到下一行。默认位置在第一条记录之前。这就是为什么您必须使用此方法来读取阅读器中的任何数据。

我还应该打电话给 reader.Close();

是的,但取而代之的是,使用using语句来自动处理你的SqlDataReader

using(var reader = command.ExecuteReader())
{
     while (reader.Read())
     {
         // Code here
     }
} <-- your reader will be disposed here.
Run Code Online (Sandbox Code Playgroud)