使用Foreach循环中的变量
问题描述:
我希望能够检查具有相同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();
}
答
的IF EXISTS
是多余的。由于UPDATE语句使用相同的WHERE
子句,因此它只会将更新应用于符合相同条件的记录。
答
您是否真的看到代码更新数据库中的所有数量?从理论上讲,IF EXISTS部分应该防止这种情况发生。
话虽如此,我建议您将SQL命令改为这样的东西,IF EXISTS检查是多余的,因为您可以在UPDATE上使用WHERE来处理检查。
UPDATE tblUserItems SET Quantity = Quantity + 1 WHERE (UserID = '@CurrentUser') AND AND (ItemID = '@ItemID')
说了这么多,如果你有很多UserItems的仍然是大量的工作,为DB做,因为这将有可能引发很多数据库不必要的电话。不知道你的体系结构的来龙去脉是不可能的,但它可能值得寻找替代品。
答
我不知道是否这是问题,当我在主页面和结论页面之间移动时,当我移动到结论页面时,量子更新自己:S因此,也许它可能是生命周期问题?我有这个在Page_Load中,我搬到它Page_init,仍然有同样的问题
编辑:
的时候,我点击“添加”量按钮的数量增加例如数量点击两次数量增量,每页加载两次
答
我想如果不需要命令(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();
}