我创建了一个具有ID列(aitisi_ID)和类别列(kat_aitisis)的数据库。我想为列表框kat1
上显示的每个ID更新kat_aitisis列。
编辑2:“aitisi_ID”列为int
到目前为止,我有这个,但它不起作用(cn是我的SqlConnection,cmd是SqlCommand):
// Edit: This is the code that I use to add Items to my listBox
private void loadlist()
{
listBox1.Items.Clear();
listBox2.Items.Clear();
cn.Open();
string kat = "Εγκυρη";
cmd.CommandText = ("SELECT aitisi_ID,moria FROM Table2 WHERE kat_aitisis='"+kat+"' ORDER BY moria DESC");
dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
listBox1.Items.Add(dr[0].ToString());
listBox2.Items.Add(dr[1].ToString());
}
}
cn.Close();
}
string kat1 = "aaaaa";
cn.Open();
for (int i = 0; i < listBox1.Items.Count; i++)
{
listBox1.SetSelected(i, true);
cmd.CommandText = "UPDATE Table2 SET kat_aitisis='"+kat1+"' WHERE aitisi_ID='"+listBox1.SelectedIndex+"'";
cmd.ExecuteNonQuery();
cmd.Clone();
}
cn.Close();
答案 0 :(得分:4)
如果列'aitisi_ID'是数字类型,则正确的更新查询是
string kat1 = "aaaaa";
cmd.CommandText = "UPDATE Table2 SET kat_aitisis=@kat WHERE aitisi_ID=@id";
cmd.Parameters.AddWithValue("@kat", kat1);
cmd.Parameters.AddWithValue("@id", 0);
cn.Open();
for (int i = 0; i < listBox1.Items.Count; i++)
{
cmd.Parameters["@id"].Value = Convert.ToInt32(listBox1.Items[i]));
cmd.ExecuteNonQuery();
}
cn.Close();
使用两个参数创建参数化查询并使用初始值设置 具有invarian值(kat1)的字符串类型的一个参数 第二个参数是整数类型,具有虚拟初始值 然后,在循环中只更新变化参数(@id) 第二个参数的值取自ListBox1的Item集合,该集合用整数填充(所有项都传递给更新值)并按照数据表的预期转换回int
答案 1 :(得分:0)
您不需要将Id包装在单个引用块中。由于它是一个整数,SQL服务器将满意WHERE aitisi_ID ='“+ listBox1.SelectedIndex +”',但你需要ToString()它。
WHERE aitisi_ID="+listBox1.SelectedIndex.ToString()+"
答案 2 :(得分:0)
还尝试使用foreach
创建代码不那么通用:
foreach(object i in listBox1.Items)
整数不需要单引号,只需要字符串。 尝试发布您的错误,调试结果,尝试放置断点并提供更多信息。