我的表单中有checkedlistbox
,textbox
和combobox
。我收到了这个错误: -
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循环之前,它工作正常。使用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();
当我在SqlCommand之后更改for循环的位置时,它会在EmpID上抛出错误: -
Must declare the scalar variable "@EmpID".
答案 0 :(得分: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
。
这是不可能的
查询引擎必须唯一标识每个必须更新的列,因此您不能在同一参数查询中多次使用相同的列。
如果每个项目有多个Provisions,那么您有多个具有不同规定的行,则必须多次执行查询:每个项目类型一个。或者,在服务器上创建一个storedprocedure,您可以在其中传递主记录和与它们关联的条款列表,SP会执行这些操作。