2017-01-06 66 views
0

我目前有一個雙組合框選擇查詢的問題...選擇第一個組合框值後,它將該值發送到數據庫並導致第二個組合框填充。但是,從第一個組合框中進行選擇時,數據庫的異常中出現致命錯誤。如果我運行的查詢不涉及第一個組合框,它運行良好。組合框SelectedIndexChanged和Mysql致命錯誤

這是我的代碼,我一直在玩查詢行...所以我不會感到驚訝,如果它是錯誤的。

private void cmbDepartment_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      try 
      { 
       MySqlConnection connection = new MySqlConnection("server=127.0.0.1;Port=3306;database=mydatabase;uid=admin;Pwd=mypw1234;"); 

       string selectQuery = "SELECT `name` FROM `employees` WHERE `department` LIKE ?department"; 
       connection.Open(); 
       MySqlCommand command = new MySqlCommand(selectQuery, connection); 
       MySqlDataReader reader = command.ExecuteReader(); 
       while (reader.Read()) 
       { 
        command.Parameters.AddWithValue("?department",cmbDepartment.Text); 
        cmbName.Items.Add(reader.GetString("name")); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

異常說 「命令執行過程中遇到致命錯誤」 some1能解釋一下我做錯了嗎?

編輯 當我運行這個它說,我有我的語法問題近「項目」哪個名稱是「特別項目」 ...但如果我以「特別項目」跑直查詢它的工作原理精...

string selectQuery = "SELECT `name` FROM `employees` WHERE `department` = " + cmbDepartment.Text + ""; 
+0

任何想法是錯誤可能是什麼? –

+0

在執行命令之前設置參數。 –

+0

ex表示「在命令執行過程中遇到致命錯誤」 – Mokey

回答

2

你讓每一次創建參數讀卡器讀取了一行:

while (reader.Read()) 
{ 
    command.Parameters.AddWithValue("?department", cmbDepartment.Text); 
    cmbName.Items.Add(reader.GetString("name")); 
} 

更糟的是,你不能傳遞你,你執行你的命令之前,所以你的命令呢不是h請參閱department參數。

您的代碼應該是這樣的:

// add the parameter first 
command.Parameters.AddWithValue("?department", cmbDepartment.Text); 

// Now execute the command. Now it has the parameter 
MySqlDataReader reader = command.ExecuteReader(); 

// Now populate your combo box 
while (reader.Read()) 
{ 
    cmbName.Items.Add(reader.GetString("name")); 
} 
+0

我看到......嘆息......一旦我覺得自己失落了,我會犯這樣的錯誤......作品就像一個魅力。注意:)謝謝 – Mokey

+0

你可以用命令生成器和數據適配器來填充數據網格嗎? – Mokey

+0

你可以使用任何你想要的。它只需要數據,並不關心你如何獲取數據。即使您從Web服務獲取數據,它也可以工作。 – CodingYoshi