2013-06-25 31 views
1

我有下面的代碼,當我填寫一個名稱或任何它可能會,它將搜索MySQL數據庫並顯示我有你輸入的每個名字它。獲取文本框顯示MySQL的同一行的記錄

MySqlConnection connection2 = new MySqlConnection("Server=" + server + ";" + "Port=" + port + ";" + "Database=" + database + ";" + "Uid=" + uid + ";" + "Password=" + password + ";"); 


      connection2.Open(); 
      string query = @"SELECT DISTINCT name2 FROM childDatabase WHERE name2 Like '%" + childSearch.Text + "%'"; 
        MySqlCommand cmd = new MySqlCommand(query, connection2); 

       cmd.ExecuteNonQuery(); 

       MySqlDataAdapter da = new MySqlDataAdapter(query, connection2); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 


       childSearchCombo.DataSource = dt; 
       childSearchCombo.ValueMember = dt.Columns[0].ColumnName; 
       connection2.Close(); 

現在,這段代碼很好,它用於我的comboBox。我需要的是,當你按下按鈕(讓我們說... btnShow)它應該顯示從同一行數據庫中檢索的其餘部分。現在它只顯示[0]處的索引,對於每條記錄來說顯然都不是動態的,並且即使我明白,它也是代碼中的明顯缺陷。

這是它的代碼:

 MySqlConnection connection2 = new MySqlConnection("Server=" + server + ";" + "Port=" + port + ";" + "Database=" + database + ";" + "Uid=" + uid + ";" + "Password=" + password + ";"); 

     connection2.Open(); 
     string query = @"SELECT DISTINCT name2, age, gender FROM childDatabase"; 
     MySqlCommand cmd = new MySqlCommand(query, connection2); 

     cmd.ExecuteNonQuery(); 

     MySqlDataAdapter da = new MySqlDataAdapter(query, connection2); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 


     firstNameDisp.Text = dt.Columns[0].ColumnName; 
     ageDisp.Text = dt.Columns[1].ColumnName; 
     genderDisp.Text = dt.Columns[2].ColumnName; 

所以基本上代碼應在同一行中顯示的姓名,年齡和性別的最後3行作爲ComboBox中選定。

我已經搜索了很長時間,我的知識似乎還沒有達到標準。任何幫助表示讚賞!

回答

2

您應該使用using語句正確地處理您的MySQL對象。

這是一個代碼片段,讓你開始。

DataTable dt = new DataTable(); 
string _CS = "Server=" + server + ";Port=" + port + ";Database=" + database + ";Uid=" + uid + ";Password=" + password; 
using (MySqlConnection connection2 = new MySqlConnection(_CS)) 
{ 
    connection2.Open(); 
    string query = @"SELECT DISTINCT * FROM childDatabase"; 
    using (MySqlCommand cmd = new MySqlCommand(query, connection2)) 
    { 
     // cmd.ExecuteNonQuery(); There's no need to execute this. da.Fill() will 
     // execute your command. 
     using (MySqlDataAdapter da = new MySqlDataAdapter(cmd)) 
      da.Fill(dt); 
    } 
    // connection2.Close(); No need to close either. The using statement does that. 
} 

foreach (var st in dt.AsEnumerable()) 
{ 
    if (st.Field<string>("name2").Contains(childSearch.Text)) 
    // or .Contains(yourComboBox.SelectedItem.ToString()) 
    { 
     childSearchCombo.Items.Add(st.Field<string>("name2")); 
     firstNameDisp.Text = st.Field<string>("your column name"); 
     ageDisp.Text = st.Field<string>(0); // or by index 
     genderDisp.Text = st.Field<string>("column name or index"); 
     // Note that st.Field<T> also can be a decimal, a bool, an int etc.. 
    } 
} 

這種方式,你不需要查詢每一點點。我也不是100%肯定這完全可以工作,我認爲你必須有一點bug。

無論如何,可能有很多更好的方法來執行此操作。但我認爲這是一個很好的學習曲線。祝你好運!

+0

隨着一點tweeking,這成功了。多謝老兄! – ScorpioBlue

+0

@ScorpioBlue很高興幫助:) – DeMama