2010-12-06 7 views
0

私のテーブルの「数量」列を更新するには、以下のコードを使用しますが、選択と更新はすべての製品を更新するforeachループの内側にあるためです。SQLによる数量の更新

さらに、ページがリロードされ、ユーザーが追加ボタンをクリックした回数に基づいて金額が増加すると、製品も更新されます。例えば。追加ボタンを2回クリックすると、毎回2つずつ増分されます。

私は理想的には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();     
} 
+2

[Foreach Loopの変数を使用する](0120-338-501) – Hogan

+2

数量はいつ更新する必要がありますか? –

+0

@Chuck数量は更新する必要があります。ユーザーが項目を追加する場合は、その項目が既に追加されていて、量が1つ増えます。 – user527330

答えて

0

おそらくSQLでIN()関数を使用することができます。

結果セットまたはカンマ区切りリストのいずれかを使用できます。

UPDATE tblUserItems 
SET Quantity = Quantity+1 
WHERE UserID = @CurrentUser 
AND ItemID IN(123,456,789,001) 
0

ループ内のコードは実際にはforeachでは独立しています。つまり、Session["UserSession"]にループしていますが、SQLコマンドはSession["UserSession"]の値で何もしません。

あなたがする必要があるのは、foreach行をコメントアウトするだけで、コードは正常に実行されるはずです。

投稿したコードのどこかに、CurentUserCommand、ItemIdCommand(その型はSqlCommandまたはDBCommand)のような名前のパラメータ変数があります(これはSQL文が使用しているものです)。

+0

Foreachは各ItemIDをテーブルに挿入しています。問題の原因となる量 – user527330

+0

foreachのItemId変数はループ内で使用されません。少なくとも、コードは意味をなさない、そして冗長である。 –

+0

foreachループを削除すると、sqlは最後の項目をセッションに挿入し、リストはすべてを挿入することはありません – user527330

関連する問題