【发布时间】: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.Text或ListBox1.SelectedItem.Value。顺便说一句,您能否解释一下更新查询中的 con.Database 是什么。 -
还是不行..@Supra
-
在您的帖子中您提到可以多次选择条形码,但您的数据库架构似乎是错误的,因为您正在更新单个字段。这没有任何意义。您要尝试的是执行一对一关系,但您要实现的是一对多关系,此条形码应保存在单独的表中。