2010-12-06 169 views
1

我希望能夠檢查具有相同ID的項目是否已經放入數據庫中,如果是,則更新該項目的數量,但是由於事實上,我有 這在foreach循環,它會更新每個項目的數量。使用Foreach循環中的變量

當我把命令放在循環之外時,我無法使用'ItemID',因爲它不在上下文中,有沒有我可以解決這個問題?

謝謝

foreach (UserItem ItemID in (List<UserItem>)Session["UserSession"]) 
{ 
    ConclusionPage.InsertCommand = "IF EXISTS (SELECT ItemID FROM tblUserItems WHERE UserID='@CurrentUser' AND ItemID='@ItemID') UPDATE tblUserItems SET Quantity = Quantity+1 WHERE (UserID = '@CurrentUser') AND (ItemID = '@ItemID')"; 
    ConclusionPage.Insert();     
} 

回答

1

IF EXISTS是多餘的。由於UPDATE語句使用相同的WHERE子句,因此它只會將更新應用於符合相同條件的記錄。

0

您是否真的看到代碼更新數據庫中的所有數量?從理論上講,IF EXISTS部分應該防止這種情況發生。

話雖如此,我建議您將SQL命令改爲這樣的東西,IF EXISTS檢查是多餘的,因爲您可以在UPDATE上使用W​​HERE來處理檢查。

UPDATE tblUserItems SET Quantity = Quantity + 1 WHERE (UserID = '@CurrentUser') AND AND (ItemID = '@ItemID') 

說了這麼多,如果你有很多UserItems的仍然是大量的工作,爲DB做,因爲這將有可能引發很多數據庫不必要的電話。不知道你的體系結構的來龍去脈是不可能的,但它可能值得尋找替代品。

0

我不知道是否這是問題,當我在主頁面和結論頁面之間移動時,當我移動到結論頁面時,量子更新自己:S因此,也許它可能是生命週期問題?我有這個在Page_Load中,我搬到它Page_init,仍然有同樣的問題

編輯:

的時候,我點擊「添加」量按鈕的數量增加例如數量點擊兩次數量增量,每頁加載兩次

1

我想如果不需要命令(IF EXISTS ...)。

試試這個代碼:

ConclusionPage.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CurrentUser", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "UserID", System.Data.DataRowVersion.Current, false, null, "", "", "")); 
    ConclusionPage.UpdateCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ItemID", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, 0, 0, "ItemID", System.Data.DataRowVersion.Current, false, null, "", "", "")); 
    ConclusionPage.CommandType = System.Data.CommandType.Text; 
    ConclusionPage.UpdateCommand = "UPDATE tblUserItems SET Quantity = Quantity+1 WHERE (UserID = @CurrentUser) AND (ItemID = '@ItemID')"; 

    foreach (UserItem ItemID in (List<UserItem>)Session["UserSession"]) 
    { 
     ConclusionPage.Parameters[0].Value = CurrentUser; 
     ConclusionPage.Parameters[1].Value = ItemID; 
     ConclusionPage.ExecuteNonQuery(); 
    }