2010-12-06 6 views
0

J'utilise le code ci-dessous pour mettre à jour une colonne "Quantité" dans ma table mais je pense que parce que Select et Update est dans une boucle foreach, elle met à jour tous les produits. En outre, les produits sont également mis à jour lorsque la page est rechargée et le montant est augmenté en fonction du nombre de clics effectués par l'utilisateur sur le bouton d'ajout. Par exemple. Cliquez deux fois sur le bouton Ajouter deux fois les incréments de quantité.Mise à jour de la quantité via SQL

J'ai idéalement besoin de pouvoir utiliser l'ItemID en dehors de la boucle foreach mais je ne peux pas.

Des suggestions?

code:

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

duplication possible de [Utilisation d'une variable d'une boucle Foreach] (http://stackoverflow.com/questions/4369050/using-a-variable-from-a-foreach-loop) – Hogan

+2

Quand la quantité doit-elle être mise à jour? –

+0

@Chuck La quantité doit être mise à jour par exemple si l'utilisateur ajoute un article mais que cet article a déjà été ajouté alors la quantité doit être incrémentée de – user527330

Répondre

0

Vous pouvez probablement utiliser la fonction IN() dans SQL.

Cela peut prendre un jeu de résultats ou une liste délimitée par des virgules.

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

Le code à l'intérieur de la boucle est réellement indépendant du foreach. Ce que je veux dire par là, c'est que nous sommes en boucle sur Session["UserSession"], mais la commande SQL ne fait rien avec les valeurs de Session["UserSession"].

Tout ce que vous devez faire est de commenter la ligne foreach et le code devrait s'exécuter correctement.

Quelque part au-dessus du code que vous avez posté, il y aura des variables de paramètre (probablement) nommées comme CurentUserCommand, ItemIdCommand (leurs types seront SqlCommand ou DBCommand) - c'est ce que l'instruction SQL utilise.

+0

Le Foreach insère chaque ID d'article dans la table, que les bits fonctionnent correctement quantité causant des problèmes – user527330

+0

La variable ItemId dans foreach n'est pas utilisée dans la boucle. Au moins, le code n'a pas de sens et est redondant. –

+0

Si je supprime la boucle foreach alors le sql insérera seulement le dernier élément dans la session et la liste pas tous – user527330