我在c#中获取了winform应用程序从SQL服务器数据库中获取值。
我可以在combobox
中获取我想要的值,但是根据所做的选择,我想在checkedcombobox
中显示相应的sql行,供用户选择所需的值。
我的代码是:(填充组合框)
SqlDataAdapter SDA = new SqlDataAdapter("select distinct desempenho from vidros", con);
DataTable DTT = new DataTable();
SDA.Fill(DTT);
desempenho.Items.Clear();
foreach (DataRow ROW in DTT.Rows)
{
desempenho.Items.Add(ROW["desempenho"].ToString());
}
并且:(在checkcombobox中显示所选行)女巫无法正常工作。
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con);
DataTable DTT = new DataTable();
sda.Fill(DTT);
checkedListBox1.Items.Clear();
foreach (DataRow AB in DTT.Rows)
{
checkedListBox1.Items.Add(AB["desc"].ToString());
}
}
这是为用户提供多种选择的最佳方式吗? 有谁知道代码可能出现什么问题?
提前致谢。
答案 0 :(得分:1)
这个错误迟早会发生在每个人身上。
DESC几乎是任何存在的数据库系统中的保留关键字。它在ORDER BY子句中用于使结果按降序排序。
因此,如果您确实有一个以这种方式命名的字段(最好尽快更改该名称),则需要将其括在转义字符中(Sql Server使用方形块)
SqlDataAdapter sda = new SqlDataAdapter(@"select [desc]
from vidros where desempenho ='" + desempenho.Text + "'", con);
说我还建议使用参数化查询。在你的情况下,你应该是相对安全的,但最好完全避免任何sql注入的可能性
SqlDataAdapter sda = new SqlDataAdapter(@"select [desc]
from vidros where desempenho = @emp", con);
sda.SelectCommand.Parameters.Add("@emp", SqlDbType.NVarChar).Value = desempenho.Text;
.....
答案 1 :(得分:1)
看起来绑定列表框的代码放在不正确的位置。 如果要根据组合框的选定项绑定列表框,则需要在组合框的SelectedIndexChanged事件中编写该逻辑。
如果您将代码移动到combobox的SelectedIndexChanged事件处理程序,如下所示。
private void desempenho_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter sda = new SqlDataAdapter("select desc from vidros where desempenho ='" + desempenho.Text + "'", con);
DataTable DTT = new DataTable();
sda.Fill(DTT);
checkedListBox1.Items.Clear();
foreach (DataRow AB in DTT.Rows)
{
checkedListBox1.Items.Add(AB["desc"].ToString());
}
}
将此处理程序附加到处理程序的SelectedIndexChanged事件,它应该解决问题。