0

私は 、 を持ってcheckedlistboxtextboxます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 ループを使用すると、 mycombobox 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".
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そのため、複数回追加する傾向があります。不可能です

クエリ エンジンは、更新する必要があるすべての列を一意に識別する必要があるため、同じパラメトリック クエリで同じ列を複数回使用することはできません。

項目ごとに複数の規定がある場合、異なる規定を含む複数の行がある場合、クエリを複数回実行する必要があります: 規定タイプごとに 1 回です。または、サーバー上にストアドプロシージャを作成し、メインレコードとそれらに関連付けられたプロビジョニングのリストを渡すと、SP が処理を行います。

于 2013-06-28T09:38:04.843 に答える