我有一个DbConnect
类来查询MySQL数据库并将结果存储到数据表中 - 如下所示:
public DataTable selectCombo()
{
string query = "SELECT DISTINCT month FROM printer_count";
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(query, connection);
DataTable dt = new DataTable();
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.Fill(dt);
}
this.CloseConnection();
return dt;
}
现在如何从类中检索数据表到组合框主窗体?我可以这样做吗?
ComboBox1.DataSource = dbConnect();
ComboBox1.DisplayMember = "Name"; // column name to display
答案 0 :(得分:1)
您有两个具有相同名称的变量。 (dt)一个定义为字符串,if块内的另一个定义为数据表。您返回空字符串,当然,当您尝试分配组合的DataSource时,这不起作用
public DataTable selectCombo()
{
DataTable dt = new DataTable();
string query = "SELECT DISTINCT month FROM printer_count";
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(query, connection);
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.Fill(dt);
}
this.CloseConnection();
return dt;
}
现在你可以写
....
ComboBox1.DisplayMember = "Name";
ComboBox1.DataSource = selectCombo();
.....
此代码也不是很安全。如果出于任何原因,您得到异常,则不会调用CloseConnection而是保持打开连接,这对于系统的稳定性来说是非常有问题的。但是,修复该问题需要对OpenConnection代码采用不同的方法。而不是true,此方法应返回MySqlConnection对象,以便您的调用代码可以在连接实例周围应用using语句