C# 从Mysql数据库中检索记录并将其显示在组合框中

C# 从Mysql数据库中检索记录并将其显示在组合框中,c#,datatable,C#,Datatable,我有一个DbConnect类,它查询一个MySQL数据库并将结果存储到一个datatable中,类似这样: public DataTable selectCombo() { string query = "SELECT DISTINCT month FROM printer_count"; if (this.OpenConnection() == true) { MySqlCommand cmd = new MySqlCo

我有一个
DbConnect
类,它查询一个MySQL数据库并将结果存储到一个datatable中,类似这样:

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;
 }
现在,如何将datatable从类检索到组合框主窗体中?我可以这样做吗

ComboBox1.DataSource = dbConnect();
ComboBox1.DisplayMember = "Name";    // column name to display

您有两个同名的变量。(dt)一个定义为字符串,if块内的另一个定义为数据表。您返回空字符串,当您尝试分配组合的数据源时,这当然无法工作

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代码。这个方法应该返回MySqlConnection对象而不是true,这样调用代码就可以在连接实例周围应用using语句了

返回类型是
string
,您正在返回
DataTable
谢谢,我试着添加这一行来加载数据源:this.toolstripcombox1.displaymber=“Name”;this.toolstripcombox1.DataSource=dbConnect.selectCombo();toolstripcombobox是否没有displaymember和datasource bcouse的定义?我收到一个错误。请看这里: