![](/img/trans.png)
[英]reader.Read() only read once even when there are multiple rows to 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.