C# 获取文本框以显示MySQL同一行的记录
我有下面的代码,当我填写一个名字或任何可能的名字时,它会在MySQL数据库中搜索,并向我显示所有你输入的名字C# 获取文本框以显示MySQL同一行的记录,c#,mysql,database,textbox,C#,Mysql,Database,Textbox,我有下面的代码,当我填写一个名字或任何可能的名字时,它会在MySQL数据库中搜索,并向我显示所有你输入的名字 MySqlConnection connection2 = new MySqlConnection("Server=" + server + ";" + "Port=" + port + ";" + "Database=" + database + ";" + "Uid=" + uid + ";" + "Password=" + password + ";");
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行应该在组合框中选择的同一行中显示姓名、年龄和性别
我找了很长时间,我的知识似乎还没有达到标准。感谢您的帮助 您应该使用
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..
}
}
DataTable dt=newdatatable();
字符串“CS=”Server=“+Server+”;Port=“+Port+”;Database=“+Database+”;Uid=“+Uid+”;Password=“+Password;
使用(MySqlConnection connection2=新的MySqlConnection(_-CS))
{
连接2.Open();
字符串查询=@“从childDatabase中选择不同的*”;
使用(MySqlCommand cmd=newmysqlcommand(查询,连接2))
{
//cmd.ExecuteNonQuery();不需要执行此命令。da.Fill()将
//执行你的命令。
使用(MySqlDataAdapter da=newmysqldataadapter(cmd))
da.填充(dt);
}
//connection2.Close();也不需要关闭。using语句会这样做。
}
foreach(dt.AsEnumerable()中的var st)
{
if(st.Field(“name2”)包含(childSearch.Text))
//或.Contains(您的ComboBox.SelectedItem.ToString())
{
childSearchCombo.Items.Add(st.Field(“name2”);
firstNameDisp.Text=st.Field(“您的列名”);
ageDisp.Text=st.Field(0);//或按索引
genderDisp.Text=st.Field(“列名或索引”);
//请注意,st.字段也可以是十进制、布尔、整数等。。
}
}
这样,您就不需要查询每一点。我也不是100%肯定这会完全奏效,我想你得绕一圈
无论如何,可能有很多更好的方法来实现这一点。但我认为这是一个很好的学习曲线。祝你好运 经过一点努力,这一切都成功了。非常感谢你,伙计@天蝎蓝很乐意帮忙:)