错误:已声明变量名'@Provision'

时间:2013-06-28 09:35:38

标签: c# winforms sql-server-2005

我的表单中有checkedlistboxtextboxcombobox。我收到了这个错误: -

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".

1 个答案:

答案 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会执行这些操作。