2009-05-15 6 views

Antwort

1

kann ich Ihnen eine einfache SQL-Abfrage geben, was Sie dies wollen, wie zurückkehren wird:

SELECT name, price FROM [product] WHERE ProdID IN (3,16,12) 

aber es sicher zu tun und effizient ist es am besten zu wissen, welche Art von db Sie haben und wo diese Zeichenfolge von IDs kommt (wie es gebaut wird).


Basierend auf Ihren Kommentar, es klingt wie Sie die Sitzung verwenden (und ein ArrayList- igitt. Es sei denn, Sie immer noch auf .Net sind 1,1 sie sind böse) als Warenkorb. Was Sie stattdessen tun möchten, ist dies in die Datenbank zu verschieben. Anstatt jedes Einkaufswagenelement in die Sitzung zu setzen, muss eine db-Tabelle vorhanden sein und jedes Mal, wenn der Benutzer ein Element auswählt, dieses Element zur Einkaufswagen-Tabelle hinzufügen. Dann wird Ihre SQL-Abfrage wie folgt aussehen:

SELECT name, price 
FROM [product] 
WHERE ProdID IN 
    SELECT ProdID 
    FROM [ShoppingCart] 
    WHERE CartSession= @CurrentSessionID 
+0

ok, ich habe eine Gridview, die Elemente anzeigt, wenn der Benutzer den Button 'in den Warenkorb' klickt. Einmal angeklickt wird die ItemID des Items in eine Arraylist gelegt und in der Session gehalten. , woraufhin der Benutzer auf die Warenkorbseite geleitet wird, wo beim Laden der Seite das ausgewählte Element in die Seitenansicht der Seiten eingefügt wird. Danach sende ich die Werte von der Arraylist zu einem String getrennt durch Komma ',' und daher "3, 16, 12" der Name der Zeichenfolge, die die Werte enthält, ist ProductIDs. Ich habe es versucht, aber wie genau kann ich die Stringvariable der SQL-Abfrage zuweisen? danke – pier

1

verwenden einige Funktion Ihre getrennte Zeichenfolge in eine Tabelle aufgeteilt:

Here is an example.

dann eine gespeicherte Prozedur wie folgt verwenden:

CREATE PROCEDURE GetProductsByDelimitedString 
@myString nvarchar(max) 
AS 
BEGIN 
select * from Products where ID in (select * from SplitFunction(@myString)) 
END 

Dann binden Sie Ihre Gridview an das Ergebnis der gespeicherten Prozedur:

string myString = "3,6,12"; 

    SqlConnection conn = GetSqlConnection(); 
    GridView gvw = GetGridView(); 
    SqlCommand cmd = new SqlCommand("GetProductsByDelimitedString", conn); 

    cmd.CommandType = System.Data.CommandType.StoredProcedure;   
    cmd.Parameters.AddWithValue("@myString", myString); 
    try 
    { 
     conn.Open(); 
     gvw.DataSource = cmd.ExecuteReader(); 
     gvw.DataBind(); 
     conn.Close(); 
    } 
    catch 
    { 
     // something bad happened 
    }