Avatar billede mema Nybegynder
05. marts 2009 - 09:38 Der er 1 kommentar

ShoppingCart problem - problem med samtidig køb af en enestående produkt

Hej - Jeg er ved at oprette en webshop i asp.net 2 og sql 2005.
Da mine produkter er unique, skal jeg forhindre, at 2 kunder samtidig kan købe et og det samme produkt.
Jeg har tænkt mig at gøre det, da man trykke på 'Køb produkt' (der lægger produktet i indkøbskurv). En SP skal tjekke om ProduktID'et ikke allerede står i ShoppingCart tabel, og hvis ikke, så må det oprette en ny post i ShoppingCart tabel. Ellers må det gerne melde fejl (fejlhåndtering kan jeg evt. behandles i webformen).

Er der nogen, der har haft eftaring med dette problem (forhindring af samtidig køb af en og det samme produkt) og kan hjælpe mig ved dette?

Ellers har jeg 2 tabeller, ShoppingCart og Produkt, hvor ProduktID er PK i Produkt tabel og FK i ShoppingCart tabel.

Mine tabeller:
-------------
Produkt betår af: ProduktId(int), ProduktNavn(varchar) og flere andre felter..
ShoppingCart består af: CartId(char (36)), ProduktId(int), DateAdded(GetDate())

Jeg har lavet en SP der skulle evt. tager sig at denne her, men det virker kun, hvis CartId i ShoppingCart tabel findes allerede og ikke for en ny CartID (dvs en ny samtidig købende kunde, der få tildelt et nyt CartId (Guid)).

Min SP der ikke virker:
----------------------
ALTER  PROCEDURE ShoppingCartAddItem
@CartID char(36),
@ProduktID int
AS
BEGIN
--Følgende 3 linie returnerer ProdukID, der ikke findes i ShoppingCart -> ProduktID felt
SELECT ProduktID AS pidProd FROM Produkt
EXCEPT
SELECT ProduktID AS pidShop FROM ShoppingCart

IF EXISTS (SELECT ProduktNavn FROM Produkt WHERE ProduktID=@ProduktID)
INSERT INTO ShoppingCart (CartID, ProduktID, DateAdded)
VALUES (@CartID, @ProduktID, GETDATE())
END
Avatar billede websam Nybegynder
18. marts 2009 - 20:57 #1
Cart id'et er vel ikke det vigtigste. Hvis du har et sand/falsk felt i cart tabel der angiver om købet er gennemført kan du lave en sql der søger efter produkt id i cart tabellen hvor købet ikke er gennemført.

noget ala:

select productId from cart where done = false

/Websam
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester