winforms 我遇到了一个问题,显示添加到数据库中的列表需要很长时间

z0qdvdin  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(130)

我目前正在做一个图书管理项目,我正在使用Visual Studio的SQL Server。我在数据库中有一个图书类别表,我试图将它放在一个组合框中。
这是代码-我看不出有什么问题,但类别需要这么长的时间才能在组合框中可见。
还有,列表是重复的,可能是因为while循环吗?如果是这样,有没有办法修复它?

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                con.ConnectionString = (@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\malek\source\repos\BookStore\BookStore\BOOKDB.mdf;Integrated Security=True");
                scmd.Connection = con;
                con.Open();
                scmd.CommandText = "SELECT CATEGORY FROM BOOKCAT";
                var rd = scmd.ExecuteReader();
                while (rd.Read())
                {
                    List.Add(Convert.ToString(rd[0]));
                }
                int i = 0;
                while (i < List.LongCount())
                {
                    comboBox1.Items.Add(List[i]);
                    i = i + 1;
                }

            }
            catch (Exception EX)
            {

                MessageBox.Show(EX.Message);
            }
            finally
            {
                con.Close();
            }
        }

我错过了什么?
注意:我没有收到任何错误!!

sf6xfgos

sf6xfgos1#

数据绑定是什么意思?
就像这样

var da = new SqlDataAdapter(
  "SELECT DISTINCT CATEGORY FROM BOOKCAT ORDER BY CATEGORY"
  @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\malek\source\repos\BookStore\BookStore\BOOKDB.mdf;Integrated Security=True"
);
var dt = new DataTable();
da.Fill(dt);
categoryComboBox.DisplayMember = "CATEGORY";
categoryComboBox.ValueMember = "CATEGORY";
categoryComboBox.DataSource = dt;

而当你想要的东西用户选择:

var cat = categoryComboBox.SelectedValue as string;

简单吧?
如果使用强类型数据集,则会更容易;为此,您只需向项目中添加一个新的DataSet类型文件(必须使用Net Framework,而不是Net Core/5+),将数据库拖到数据集中,向获取不同类别的TableAdapter类别添加一个查询(如上所述),然后打开数据源窗口,将Category更改为组合并将其标记到窗体上。vs将全部写入

pkln4tw6

pkln4tw62#

根据您发布的代码,您似乎正在comboBox1SelectedIndexChanged事件中从数据库加载类别。
因此,每次从comboBox1中选择一个新项时,都要执行以下代码;您将进入数据库,从BOOKCAT表中加载所有内容,并将这些内容放入ListcomboBox1中。这就是为什么您会看到重复的类别,也可能是为什么一个类别在ComboBox中要花这么长时间才能显示。
您可能不希望每次选定的索引更改时都从数据库加载ComboBox项,因此您应该在其他地方执行此操作。例如,您可以在Form的构造函数中或在'Load' event中执行此操作。

相关问题