0

我有一个checkedlistbox,textboxcombobox我的形式。我收到此错误:-

The variable name '@Provision' has already been declared. Variable names must be unique within a query batch or stored procedure.
Must declare the scalar variable "@BloodGroup".

在我没有为我的checkedlistbox. 使用 for 循环时,我combobox BloodGroup的 , 出现错误。

string insert = "INSERT INTO Employee(EmpID, EmpName, Address, Provision, BloodGroup) VALUES (@EmpID, @EmpName, @Address, @Provision, @BloodGroup)";

SqlCommand comm = new SqlCommand(insert, sqlCon);

comm.Parameters.AddWithValue("@EmpID", SqlDbType.Int).Value = txtEmpID.Text;
comm.Parameters.AddWithValue("@EmpName", SqlDbType.VarChar).Value = txtName.Text;
comm.Parameters.AddWithValue("@Address", SqlDbType.Text).Value = txtAdd.Text;

for (int a = 0; a < chkProvision.Items.Count; a++)
{
    if (chkProvision.GetItemChecked(a))
        comm.Parameters.AddWithValue("@Provision", SqlDbType.Char).Value = chkProvision.Items[a].ToString();
    else
        comm.Parameters.AddWithValue("@Provision", "");
}          

if (cbBlood.SelectedValue == null)
    comm.Parameters.AddWithValue("@BloodGroup", "");
else
    comm.Parameters.AddWithValue("@BloodGroup", SqlDbType.Char).Value = cbBlood.SelectedItem.ToString();

comm.ExecuteNonQuery();

当我更改我的 for 循环在 SqlCommand 之后的位置时,它会在 EmpID 上引发错误:-

Must declare the scalar variable "@EmpID".
4

1 回答 1

4

你有

for (int a = 0; a < chkProvision.Items.Count; a++)
{
    if (chkProvision.GetItemChecked(a))
        comm.Parameters.AddWithValue("@Provision", SqlDbType.Char).Value = chkProvision.Items[a].ToString();
    else
        comm.Parameters.AddWithValue("@Provision", "");
}     

所以倾向于@Provision多次添加。这是不可能的

查询引擎必须唯一标识必须更新的每一列,因此您不能在同一参数查询中多次使用同一列。

如果每个项目有多个规定,因此您有多行具有不同的规定,则必须多次执行查询:每种规定类型一个。或者,在服务器上创建一个存储过程,您可以在其中传递与它们相关的主要记录和规定列表,然后由 SP 完成。

于 2013-06-28T09:38:04.843 回答