2011-02-23 54 views
0

我目前正在使用MySQL和C#開發Windows應用程序。我有以下代碼:在MySQL中使用MySQLParameters進行查詢#

private void cboCategories_SelectedIndexChanged(object sender, EventArgs e) 
      { 
       DatabaseWork dbase = new DatabaseWork(); 
       try 
       { 
        dbase.openConnection(); 
        string query = "SELECT * FROM budgetcategory WHERE [email protected] AND [email protected]"; 
        MySqlCommand cmd = new MySqlCommand("", dbase.conn); 

        cmd.CommandText = query; 
        cmd.Parameters.AddWithValue("@userID", userID); 
        cmd.Parameters.AddWithValue("@category", cboCategories.SelectedItem.ToString()); 

        MySqlDataReader reader = cmd.ExecuteReader(); 
        while (reader.Read()) 
        { 
         setCatId(reader.GetString("budc_category_id")); 
         Console.WriteLine("Category ID: " + getCatId()); 
        } 
       } 
       catch (MySqlException ex) 
       { 
        Console.WriteLine("Cat Error: " + ex.Message); 
       } 
       finally 
       { 
        dbase.closeConnection(); 
       } 
} 

出於某種原因,當我調試它從來沒有進入while循環,就好像什麼也沒有以往任何時候都從數據庫返回的代碼。但我知道那裏應該有東西。

感謝您的幫助,您可以提供

回答

0

只是想幫你調試一點:

儘量減少這些三行:

string query = "SELECT * FROM budgetcategory WHERE [email protected] AND [email protected]"; 
MySqlCommand cmd = new MySqlCommand("", dbase.conn); 
cmd.CommandText = query; 

只是:

string query = "SELECT * FROM budgetcategory WHERE [email protected] AND [email protected]"; 
MySqlCommand cmd = new MySqlCommand(query, dbase.conn); 

現在在添加參數的那些行上放置一個斷點,並確保userID,尤其是cboCategories.SelectedItem.ToString()具有您所期望的值。

另外,您是否可以確認沒有發生異常?

如果不是這種情況,請運行查詢,使用這些確切值直接對數據庫並確認返回了某些內容。

+0

嗨,謝謝你的建議。 cboCategories會返回正確的值,並且不會拋出異常。奇怪的是,即使我硬編碼的參數值仍然永遠不會進入while循環。此外,如果我不使用參數,並將變量直接放入查詢字符串,它工作正常。它只有那些不起作用的MySQL參數 – Boardy