簡體   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