0

我创建了一个具有 ID 列 (aitisi_ID) 和类别列 (kat_aitisis) 的数据库。我想用字符串更新我的 listBox 上显示的每个 ID 的 kat_aitisis 列kat1

编辑 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();
4

3 回答 3

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();

使用两个参数创建了一个参数化查询并设置了初始值。
一个具有不变值的字符串类型参数 (kat1) 第二个参数是具有虚拟初始值的整数类型。
然后,在循环中,只有可变参数 (@id) 将被更新。
第二个参数的值取自 ListBox1 的 Item 集合,该集合用整数填充(所有项目都传递给更新值)并按数据表的预期转换回 int

于 2013-05-20T15:21:41.377 回答
0

您不需要将 Id 包装在单引号块中。因为它是一个整数,SQL 服务器会很高兴 WHERE aitisi_ID='"+listBox1.SelectedIndex+"',但你需要 ToString() 它。

WHERE aitisi_ID="+listBox1.SelectedIndex.ToString()+"
于 2013-05-20T15:00:00.193 回答
0

还尝试使用以下命令创建不太通用的代码foreach

    foreach(object i in listBox1.Items)

整数不需要单引号,只需要字符串。尝试发布您的错误,调试结果,尝试放置断点并提供更多信息。

于 2013-05-20T15:04:22.303 回答