Использование переменной из цикла Foreach - PullRequest
1 голос
/ 06 декабря 2010

Я хотел бы иметь возможность проверить, был ли элемент с таким же идентификатором уже помещен в базу данных, если это так, чтобы затем обновить количество для этого элемента, однако из-за того, что у меня есть это в цикле 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();                 
}

Ответы [ 4 ]

1 голос
/ 06 декабря 2010

Я думаю, что если команда (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();
    }
1 голос
/ 06 декабря 2010

IF EXISTS является избыточным.Поскольку в выражении UPDATE используется то же предложение WHERE, обновление будет применяться только к записям, которые соответствуют тем же критериям.

0 голосов
/ 06 декабря 2010

Я не уверен, что это проблема, когда я перемещался между главной страницей и страницей заключения, когда я перемещался на страницу заключения, сами обновления обновляются: S Так, может быть, это может быть проблемой жизненного цикла?У меня есть это в Page_Load, и я переместил его в Page_init и все еще имею ту же проблему

РЕДАКТИРОВАТЬ:

Количество раз, когда я нажимаю кнопку «Добавить», является количеством числа количествоувеличивается, например, нажатием в два раза увеличения количества на два при загрузке каждой страницы

0 голосов
/ 06 декабря 2010

Вы действительно видите, как код обновляет все количества в вашей БД?Теоретически, часть IF EXISTS должна предотвратить это.

Сказав, что я бы порекомендовал вместо этого заменить команду SQL на что-то подобное, проверка IF EXISTS излишня, поскольку вы можете использовать WHERE в UPDATE.для обработки чека.

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

Сказав это, если у вас много UserItems, для БД все еще много работы, так как это может потенциально вызвать много ненужных вызовов кбаза данных.Не зная тонкостей вашей архитектуры, невозможно сказать, но, возможно, стоит поискать альтернативу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...