2013-06-28 72 views
0

我的表單中有checkedlistboxtextboxcombobox。我得到這個錯誤: -錯誤:變量名稱'@Provision'已被聲明

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

它工作時,我沒有使用for循環我checkedlistbox之前的罰款。當使用for循環時,我的comboboxBloodGroup出錯了。

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

如果'chkProvision'有多個選定的項目,你究竟在做什麼?添加多行?什麼版本的SQL Server? (實際上看起來你的模式是錯誤的,如果一個員工可以有多個,應該有另一個帶有'EmpID,Provision'的表。 –

+0

順便說一句:在你的字符串插入時是由最後的值,一個逗號沒有參數 – Smartis

+0

是的,對不起。 。輸入錯誤 – deepz

回答

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則完成這些工作。

+0

好吧,我該如何解決這個問題? – deepz

+0

@deepz:我更新了,提示可能的解決方案。 – Tigran

+0

哦,好的,謝謝我現在明白了:) – deepz