2013-02-19 91 views
1

我的連接工作正常。但是,當它運行到MysqlDataREader的dataReader行時,它將顯示窗體窗體,並且不會訪問while循環來獲取我的數據。我正在使用dataGridView來顯示我的數據庫中的信息。我做錯了什麼?謝謝MySqlDataReader dataReader = cmd.ExecuteReader()彈出窗口窗體而不進入while循環

if (this.OpenConnection() == true) 
    { 
     //Create Command 
     MySqlCommand cmd = new MySqlCommand(query, connection); 
     //Create a data reader and Execute the command 
     MySqlDataReader dataReader= cmd.ExecuteReader(); 
     //Read the data and store them in the list 
     while (dataReader.Read()) 
     { 
      list[0].Add(dataReader["id"] + ""); 
      list[1].Add(dataReader["name"] + ""); 
      list[2].Add(dataReader["weekday"] + ""); 
      list[3].Add(dataReader["description"] + ""); 
     } 

     //close Data Reader 
     dataReader.Close(); 

     //close Connection 
     this.CloseConnection(); 
    } 
+1

代碼片段沒有錯。你確定你的查詢正在返回行嗎?此外,你說winforms,但標記爲asp.net。它是什麼? – nunespascal 2013-02-19 04:08:11

回答

1

什麼是命令?

Read()函數使讀者前進到下一個記錄。如果沒有記錄返回,那麼if將立即變爲假。

所以這個命令很可能不會返回任何東西。你想這樣做(其中HandleRecord只是爲了讓代碼更清潔):

if(reader.Read()) 
{ 
    // Handle first record 
    HandleRecord(dataReader) 
    while(reader.Read()) 
    { 
     // Handle remaining records 
     HandleRecord(dataReader) 
    } 
} 
else 
{ 
    // Nothing was returned, do something 
} 

你也想處理異常。從提供的代碼看來,沒有try-catch-finally語句。如果我沒有記錯,應該看起來像這樣:

try 
{ 
    // Contact database - read/write/whatever 
} 
catch 
{ 
    // Display exception to user, log, whatever you need 
} 
finally 
{ 
    // Close database connection and other cleanup 
} 
+0

謝謝你維克多。這就是我所需要的。 – user1874435 2013-02-19 06:52:33

+0

如果答案是正確的,請將其標記爲正確:) – Viktor 2013-02-19 20:14:53