DBReader有行但Read()返回false

Mr.*_*Boy 1 .net c# sql sql-server dbconnection

using (var conn = new SqlConnection(connectionString))
{
    var cmd = new SqlCommand("SELECT * FROM mySchema.MyTable", conn);
    conn.Open();
    var reader = cmd.ExecuteReader();
    while(reader.Read())
    {...
Run Code Online (Sandbox Code Playgroud)

在调试器中,我可以看到我的阅读器有一行 - 我可以看到返回的数据 - 但是reader.Read正在返回,false所以我的处理代码没有被调用.

这似乎是非常基本的"从数据库表读取行"的东西,所以我错过了什么?我应该直接查看读者的行数据吗?

Ren*_*ogt 7

如果让调试器显示结果,它将读出读取器并枚举结果.

请参阅调试器窗口中的注释:

结果视图:扩展结果视图将枚举IEnumerable

所以你的调试器已经读出了所有的结果,如果你走到reader.Read()那里就没有更多的行可以读取和Read()返回false.


我只是用一个小小的测试来复制它.当我的调试器读取结果时,我的代码无法再读取它们.如果我不让调试器显示它们,我的代码可以读取它们.(QED)

  • @Mr.Boy 在这种特殊情况下,我不这么认为。另一方面,你为什么需要。要调试,您可以简单地在“Read()”循环中设置断点。我认为您可以非常确定 `SqlDataReader` 工作正常,所以我认为不需要在您自己的阅读循环之外/之前查看结果。 (2认同)