C#更新listBox中每个项目的数据库

时间:2013-05-20 14:56:21

标签: c# database listbox

我创建了一个具有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();

3 个答案:

答案 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)

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