繁体   English   中英

Reader.Read()即使有行也无法读取行

[英]Reader.Read() fails to read rows even though it has rows

我有一个问题,似乎阅读器指示它具有返回的SQL中的行,但阅读器的while循环从未运行。 我将一个消息框放在reader.hasrows中作为验证,并将消息框放在while循环之后的第一行。 哈希的消息框已执行,但读取的消息框未执行。 非常令人困惑。 我尝试对数据库查询,它确实会返回行。 这是代码片段。

using (DbConnection connection = CADBase.DbProviderFactory.CreateConnection())
    {
        connection.ConnectionString = CADBase.DbConnectionString;
        connection.Open();

        using (DbCommand command = connection.CreateCommand())
        {
            SQL = <statement here>;
            command.CommandText = SQL

            using (DbDataReader reader = command.ExecuteReader())
            {
                    while (reader.Read())
                    {
            //NEVER MAKES IT HERE
                    } 
    }
        }
    }

给以后这个问题的读者:请注意,发生此问题是因为OP在查询中返回了太多列。 请参阅此答案下面的评论。


我不太确定为什么会这样,但是您实际上只需要检查一次而不是两次,并且Read()方法已经做到了。

所以你真正需要的是

while (reader.Read())
{
    // Do your thing
} 

在第一次调用之前调用MoveNext()

您应该使用reader.HasRows属性,而不是方法。

也许您在reader.Read()上遇到了异常。

但是由于HasRows是属性而不是方法。 您需要编写if(reader.HasRows)进行编译。

if(reader.HasRows)
{           
    //MAKES IT HERE   
    while (reader.Read())
    {
        //NEVER MAKES IT HERE
    } 
} 

所以我想知道实际的代码是什么。

只是一个猜测。 也许您正在显示在reader.HasRows之后,reader.Read()之前的消息框中的reader对象。 显然,仅当阅读器未到达最后一行时,Read()方法才返回true(请参阅: https : //stackoverflow.com/a/1540626/516481 )。 因此,如果读者在最后一行,它将返回false! 也许查询仅返回一行,并且您通过访问读取器对象(也许使用调试器)并以某种方式更改读取器对象的内部状态并将读取器移至最后一行?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM