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();
}
不要设置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>
,你就可以简单地将它们添加到组合框中。