2016-06-28 26 views
-1

我一直在試圖執行一個SQL查詢並返回結果讀取器,但它不像我認爲的那樣行事。爲什麼Executereader在while(reader.Read())塊之後顯示空行?

private SQLiteDataReader genRandom() 
{ 
    string generate = "SELECT * FROM Questions"; 
    SQLiteConnection conn = dbConnectTest(); 
    conn.Open(); 
    SQLiteCommand Command = new SQLiteCommand(generate, conn); 
    SQLiteDataReader dreader = Command.ExecuteReader(); 
    genMarks=0; 

    if (dreader.HasRows) 
    { //This if-block returns 'YES' message 
     if (dreader.HasRows) 
      MessageBox.Show("YES"); 
     else 
      MessageBox.Show("NO"); 

     while (dreader.Read()) 
     { 
      genMarks += dreader.GetInt32(3); 
     } 

     //But this if-block returns 'NO' 
     if (dreader.HasRows) 
      MessageBox.Show("YES"); 
     else 
      MessageBox.Show("NO"); 
    } 
    else 
    { 
     MessageBox.Show("No rows Found"); 
    } 

    return dreader; 
    conn.Close(); 
} 

在執行while-block之後,'dreader'變空了。我在這裏做錯了什麼?

+0

'雖然(reader.read())'已經讀過所有行。這是正常的。 – Berkay

+0

爲什麼不把結果賦給數據表例如: 'var dt = new DataTable();'然後'dt.Load(command.ExecuteReader()'在你的方法中改變簽名來返回DataTable也改變你的' Command'給像'cmd'這樣的變量不使用保留字作爲變量名 – MethodMan

+0

我完全意識到這一點,謝謝!這樣做更有意義! 您應該發佈這個答案。 – Sanju

回答

2

讀完所有行後,讀者不會開玩笑。

讀者正在做它應該做的事情。

SqlDataReader.HasRows

這是一個消防水龍帶。當數據輸出結束時,它不再在軟管中。

沒有任何目的返回該dreader,因爲它是空的並且連接已關閉。

你可能想返回

List<int> 
相關問題