1

名前などを入力すると、MySQL DB を検索して、入力した名前を含むすべての名前を表示する次のコードがあります。

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();

さて、このコードは問題なく、私のコンボボックスに使用されています。私が必要とするのは、ボタンを押すと(たとえば... 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 行は、名前、年齢、および性別を、コンボボックスで選択されているのと同じ行に表示する必要があります。

私は長い間検索してきましたが、私の知識はまだ標準に達していないようです. どんな助けでも大歓迎です!

4

1 に答える 1

2

usingMySQL オブジェクトを適切に破棄するには、ステートメントを使用する必要があります。

これは、開始するためのコード スニペットです。

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% 確信が持てません。

とにかく、おそらくこれを実行するためのより良い方法がたくさんあります。しかし、それは良い学習曲線だと思います。幸運を!

于 2013-06-26T20:40:59.750 に答える