【问题标题】:How to update multiple selections of a listbox, in different rows of a nvarchar() column in database?如何在数据库中 nvarchar() 列的不同行中更新列表框的多个选择?
【发布时间】:2025-12-13 19:10:01
【问题描述】:

我有一个由多个用户 ID 组成的下拉复选框。现在选择一个用户,它将显示 2 个列表框,Listbox1 有一个条形码列表,而 Listbox2 包含已经分配给用户的条形码。需要从 listbox1 中选择多个项目并将其分配给用户。现在我想根据所选条形码更新所选用户 ID 列。每个条形码在数据库中的不同行中。我试过了:

protected void assign_Click(object sender, EventArgs e)
{
    try
    {
        if (ListBox1.SelectedIndex == -1)
        {
            Label9.Text = "Please Select Barcodes";
        }
        else
        {
            foreach (ListItem item in ListBox1.Items)
            {
                if (item.Selected == true)
                {
                    ListBox2.Items.Add(item);
                    ListBox1.Items.Remove(ListBox1.SelectedItem);
                }
            }

        }
    }
    catch { //Some code }
    finally
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Con"].ConnectionString);

        string cmdtxt= "Update " + con.Database + " set AssgnId= @userid where barcode= @barcode ";

        SqlCommand cmd = new SqlCommand(cmdtxt,con);
        cmd.Parameters.AddWithValue("@userid", ddchkteachers2.SelectedItem.Value);
        cmd.Parameters.AddWithValue("@barcode", ListBox1.SelectedItem);

        con.Open();

        foreach (ListItem item in ListBox1.Items)
        {
            if (item.Selected == true)
            {
                cmd.Parameters["@barcode"].Value = Convert.ToString(ListBox1.SelectedItem);
                cmd.ExecuteNonQuery();
            }
        } 
        con.Close();
    }
}

选定的条形码位于数据库的 nvarchar() 列中。如何转换?条形码的用户 ID 列中的当前值为 Null。代码不更新。

【问题讨论】:

  • 您的更新语句是错误的,而不是 con.Database,请提及表名,因为它是来自您的 web.config 的数据库连接字符串。
  • 这应该不是问题,因为它是动态生成的。
  • 首先,给您的服务器控件起一个正确的名称,通过它可以很容易地识别它们,您遵循的是一种糟糕的编码习惯。接下来,在将值保存在数据库中时,请使用ListBox1.SelectedItem.TextListBox1.SelectedItem.Value。顺便说一句,您能否解释一下更新查询中的 con.Database 是什么。
  • 还是不行..@Supra
  • 在您的帖子中您提到可以多次选择条形码,但您的数据库架构似乎是错误的,因为您正在更新单个字段。这没有任何意义。您要尝试的是执行一对一关系,但您要实现的是一对多关系,此条形码应保存在单独的表中。

标签: c# sql asp.net listbox


【解决方案1】:

您在第一个loop 中通过检查它们是否被选中来从ListBox1 中删除项目,而在第二个loop 中您正在做同样的事情。这意味着您的ListBox1 在第二个循环中将没有任何价值。您可以将breakpoint 放入循环中并验证其值。

当语句执行时,

cmd.Parameters.AddWithValue("@barcode", ListBox1.SelectedItem);

ListBox1.SelectedItem 中没有任何内容,foreach 循环中的情况也是如此。 希望对您有所帮助。

【讨论】:

  • 我意识到了这个错误......谢谢你的指出。它现在工作正常..
最近更新 更多