0

选择单选选项后,我想在组合框中显示我的数据库中的项目。当我尝试这个时,组合框中没有显示任何内容。请帮忙

private void chkDetailsButton_Click(object sender, EventArgs e)
{
    if (radioButtonA.Checked)
    {
        OleDbConnection connect = db.dbConnect();

        try
        {
            connect.Open();
            MessageBox.Show("Opened");
            OleDbCommand command = new OleDbCommand();
            command.Connection = connect;

            command.CommandText = "Select * from Categories";
            DataTable dt = new DataTable();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                cmbDisplay.Items.Add(dt.Rows[i]["SeatNo"]);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Exception in Database" + ex);
        }
        finally
        {
            connect.Close();
        }
    }
}
4

6 回答 6

4

您的 try 块应类似于以下内容:

    try
    {
        connect.Open();
        MessageBox.Show("Opened");
        OleDbCommand command = new OleDbCommand();
        command.Connection = connect;

        command.CommandText = "Select * from Categories";
        DataTable dt = new DataTable();

        //Put some data in the datatable!!
        using(OleDbDataReader reader = command.ExecuteReader())
        {
            dt.Load(reader);
        }

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            cmbDisplay.Items.Add(dt.Rows[i]["SeatNo"]);
        }
    }

您需要用数据填充 DataTable!

您还可以考虑以下几点:

        using(OleDbDataReader reader = command.ExecuteReader())
        {
            while(reader.Read())
            {
                cmbDisplay.Items.Add(reader.GetValue(reader.GetOrdinal("SeatNo"));
            }
        }

这样你甚至不需要使用 DataTable;对于大型数据集,这是一种更有效的方法。

顺便说一句,您可能希望考虑使用Using

    using(OleDbConnection connect = db.dbConnect())
    {
        try
        {
            connect.Open();
            //MessageBox.Show("Opened");
            using(OleDbCommand command = new OleDbCommand())
            {
                command.Connection = connect;
                command.CommandText = "SELECT * FROM Categories";
                using(IDataReader reader = command.ExecuteReader())
                {
                    while(reader.Read())
                    {
                            cmbDisplay.Items.Add(reader.GetValue(reader.GetOrdinal("SeatNo"));
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("An erorr occured:" + ex);
        }        
    }

这将确保您的连接、命令和阅读器对象被释放。如果您打算保留连接的实例,这是不合适的,但是因为一旦您的代码离开 using 语句,它将被关闭并处置。

于 2012-08-10T09:55:44.103 回答
3

缺少用您的 sql 命令返回的数据填充 DataTable dt。

于 2012-08-10T09:54:04.760 回答
1

尝试使用此代码 - 在您的示例中,您不会将表与数据绑定,而是创建表的新实例。

$ private void chkDetailsButton_Click(object sender, EventArgs e) 
{
 if (radioButtonA.Checked)
        {
            OleDbConnection connect = db.dbConnect();

            try
            {
                connect.Open();
                MessageBox.Show("Opened");
                OleDbCommand command = new OleDbCommand();
                command.Connection = connect;

                command.CommandText = "Select * from Categories";
                OleDbDataReader myReader = command.ExecuteReader();
                while (myReader.Read()) 
                {
                    cmbDisplay.Items.Add(myReader["SeatNo"]);
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show("Exception in Database" + ex);
            }
            finally
            {
                connect.Close();
            }
        }
    }
于 2012-08-10T09:56:15.760 回答
0

您可以使用 Datatable 填充组合框:

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Test;Integrated Security=True");
            SqlDataAdapter da = new SqlDataAdapter("select * from Books",con);
            DataTable dt = new DataTable();
            da.Fill(dt);
            comboBox1.DisplayMember = "Name";
            comboBox1.ValueMember = "ID";
            comboBox1.DataSource = dt;
于 2012-08-10T09:58:30.957 回答
0

在附加之前你没有在数据集中填充数据试试这个

     if(radio.checked) 
     {
      try 
        { 
         connect.Open();
         MessageBox.Show("Opened");
         OleDbCommand command = new OleDbCommand();
         command.Connection = connect;
         command.CommandText = "Select * from Categories";

         OleDbDataAdapter db = new OleDbDataAdapter();
         DataSet ds = new DataSet();
         db.SelectCommand = command;
         db.Fill(ds);
         for(int i=0;i<ds.Tables[0].Rows.Count;i++)
         {
           cmbDisplay.Items.Add(ds.Tables[0].Rows[i][0].ToString());      

          }
        cmDisplay.DataBind();

        }
        catch (Exception ex)
        {
            MessageBox.Show("Exception in Database" + ex);
        }
        finally
        {
            connect.Close();
        }
    }
于 2012-08-10T10:11:48.837 回答
0

我无法相信这一点。:D

你什么时候用数据库中的数据准确地填充数据表?中间什么都没有

DataTable dt = new DataTable();

for (int i = 0; i < dt.Rows.Count; i++)

于 2012-08-10T09:56:11.953 回答