使用Foreach循环中的变量

时间:2010-12-06 17:13:52

标签: c# asp.net sql

我希望能够检查一下具有相同ID的项目是否已经放入数据库中,如果是,那么更新该项目的数量,但是由于我有这个事实 这在foreach循环中会更新每个项目的数量。

当我将Command放在循环之外时,我无法使用'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();                 
}

4 个答案:

答案 0 :(得分:1)

IF EXISTS是多余的。由于UPDATE语句使用相同的WHERE子句,因此它仅将更新应用于符合相同条件的记录。

答案 1 :(得分: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();
    }

答案 2 :(得分:0)

您是否真的看到代码更新了数据库中的所有数量?理论上,IF EXISTS部分应该防止这种情况发生。

虽然我建议您将SQL命令更改为类似的内容,但IF EXISTS检查是多余的,因为您可以在UPDATE上使用W​​HERE来处理检查。

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

话虽如此,如果你有很多UserItems仍然需要DB做很多工作,因为它可能会触发大量不必要的数据库调用。如果不了解您的架构的细节,就不可能说,但可能值得一看另类。

答案 3 :(得分:0)

我不确定这是不是问题,当我在主页和结论页面之间移动时,当我移到结论页面时,数量会更新自己:S那么也许它可能是生命周期问题?我在Page_Load中有这个,我把它移到了Page_init,仍然有同样的问题

编辑:

我点击“添加”按钮的次数是数量增加的数量,例如在每次页面加载时单击两次数量增量两次