C#/SQL,我想选择特定公司的所有项目

本文关键字:公司 项目 选择 SQL | 更新日期: 2023-09-27 18:25:51

问题是当我在组合框1上选择一家公司时,该公司的所有项目都应该在combobox2上输出。但当我在comboBox1上选择一家公司时,它只在comboBox2上输出1项目。我想输出那家公司的所有项目。

这是我在特定公司上选择project_name的代码

if (e.Button == MouseButtons.Left)
{
    SqlConnection conn = new SqlConnection(connString);
    conn.Open();
    string query = "select project_name" +
                   "from JO.dbo.Proj left join JO.dbo.Comp" +
                   "on Proj.company_id = Comp.company_id" +
                   "where company_name = '" + comboBox1.SelectedItem + "'";
    SqlCommand command = new SqlCommand(query, conn);
    SqlDataReader reader = command.ExecuteReader();
    if (reader.HasRows)
    {
        while (reader.Read())
        {
            comboBox2.Text = reader["project_name"].ToString();
        }
        reader.Close();
    }
    conn.Close();
    conn.Dispose();
}

C#/SQL,我想选择特定公司的所有项目

不要设置comboBox2.Text属性,而是将项目名称添加到comboBox2.Items.

       {
        SqlConnection conn = new SqlConnection(connString);
        conn.Open();
        string query = "select project_name from JO.dbo.Proj left join JO.dbo.Comp on Proj.company_id = Comp.company_id where company_name = '" + comboBox1.SelectedItem + "'";
        SqlCommand command = new SqlCommand(query, conn);
        SqlDataReader reader = command.ExecuteReader();
        if (reader.HasRows)
        {
            comboBox2.Items.Clear();
            while (reader.Read())
            {
                comboBox2.Items.Add(reader["project_name"].ToString());
            }
            reader.Close();
        }
        conn.Close();
        conn.Dispose();
    }

为什么不将数据转换为实体列表,并将该实体绑定到组合框。你们试图做的并不是将数据绑定到组合框的正确方式

基本上是ComboBox.Text属性:获取或设置与此控件关联的文本。

有关更多详细信息,请参阅:

MSDN

这是强制性的"不要将数据连接到sql中"警告;搜索"bobby-tables"以了解您在这里做了什么非常非常错误;然而,为了有所帮助,这里有一个关于如何减少所涉及的代码的建议:

var projects = connection.Query<string>(
      @"select project_name
        from JO.dbo.Proj left join JO.dbo.Comp
          on Proj.company_id = Comp.company_id
        where company_name = @companyName",
      new { companyName = comboBox1.SelectedItem }).ToList();

在这一行之后,projects是该公司所有项目的List<string>;请注意@companyName是如何参数化以防止SQL注入的。这使用了dapper提供的Query<T>(this DBConnection, ...)扩展方法,该方法在NuGet上免费提供。

一旦你有了List<string>,你就可以简单地将它们添加到组合框中。