2013-05-12 95 views
0

我想根據用戶在組合框(cboBranch.Text)中的選擇從tblBranches中檢索一些特定數據,其中一個是class_name,但是當我試圖運行該程序時,消息框顯示MySql.Data.MySqlClient.MySqlDataReader,所以如何正確檢索我的數據庫中的數據?如何使用MySqlDataReader從數據庫mySQL檢索數據?

query = "SELECT class_name FROM tblBranches WHERE [email protected]"; 

MySqlCommand cmd = new MySqlCommand(query, con); 
cmd.Parameters.Add("@branch", MySqlDbType.VarChar, 30).Value = _order.cboBranch.Text; 

MySqlDataReader dr; 

con.Open(); 
dr = cmd.ExecuteReader(); 

string class_name = dr.ToString(); 

MessageBox.Show(class_name); 

con.Close(); 

回答

1

而不是調用ToString()方法,你需要在這種情況下調用GetString()方法傳遞列的順序位置的從零開始的索引在查詢中,零,因爲在只有一列您的查詢。

在此之前,你必須調用Read()方法推進讀者到第一或下一個記錄,你還需要檢查返回值,因爲它會返回一個bool指示如果另一個記錄被發現。

所以替換該行...

string class_name = dr.ToString(); 

隨着

string class_name = dr.Read() ? dr.GetString(0) : "Nothing Found"; 

或者,如果有可能不止一個返回的記錄......

string class_names = string.Empty; 

while (dr.Read()) 
    class_names = dr.GetString(0) + "\n"; 
+0

我不明白?你什麼意思? – Harvey 2013-05-12 06:21:07

+0

我已經擴展了答案。如果你仍然不明白,告訴我你不明白哪一部分。 – davmos 2013-05-12 06:25:20

+0

好的,謝謝你現在正在工作。 – Harvey 2013-05-12 07:31:20

0

只是一個加法:是不是更容易使用ExecuteScalar的情況下,只有1行作爲結果期望?

例子:

MySqlCommand cmd = new MySqlCommand(query, con); 
cmd.Parameters.Add("@branch", MySqlDbType.VarChar, 30).Value = _order.cboBranch.Text; 

var class_name = cmd.ExecuteScalar(); 

if (class_name != null) 
{ 
    //DoSomething with your result here. 
}else{ 
    //Item not found, handle it here 
} 
相關問題