0

我有一个 SQL 命令,它查询数据库表并检索信息....非常基本。

我可以看到阅读器在调试时从 DB 表中得到结果,但由于某种原因,它总是跳过“While Reader.Read”,然后跳过并关闭连接,从不读取数据。

    SqlConnection con = new SqlConnection(connectionString);
    SqlCommand cmd = new SqlCommand("lbx_EmailDomains_SELECT", con);
    cmd.CommandType = CommandType.StoredProcedure;

    con.Open();
    SqlDataReader reader = cmd.ExecuteReader();

    if (reader.HasRows)
    {
        while (reader.Read())
        {
           // Never Reaches Here
        }
    }

    reader.Close();
    con.Close();

更新:删除 reader.HasRows 解决了这个问题。

4

1 回答 1

4

我的猜测是,实际上它并没有达到reader.Read(). 我怀疑那reader.HasRows是假的,正是因为你还没有打电话reader.Read()

老实说,我认为测试根本没有HasRows用 - 我只是摆脱它。

请注意,最好使用using语句并摆脱手动Close()调用,这样即使发生异常,连接/读取器也会关闭。

编辑:根据评论:

  • 应该可以工作,并且这种模式显示在一些 MSDN 文档中
  • HasRows显然在返回 falsetrue之前返回reader.Read()
  • 删除HasRows测试显然解决了这个问题。奇怪的。

我想知道这里是否有一些我们不知道的调试器交互......

于 2012-09-12T22:35:47.697 回答