2009-05-15 8 views

Répondre

1

Je peux vous donner une simple requête SQL qui renverra ce que vous voulez comme ceci:

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

mais de le faire en toute sécurité et efficacement, il est préférable de savoir quel genre de db vous avoir et où cette chaîne d'ids vient (comment il est construit).


Sur la base de vos commentaires, il semble que vous utilisez la session (et un ArrayList- ugh. À moins que vous êtes toujours sur .Net 1.1 ils sont mal) comme un panier d'achat. Ce que vous voulez faire à la place est de déplacer ceci vers la base de données. Plutôt que de placer chaque objet de la session, vous avez une table db et chaque fois que l'utilisateur sélectionne un élément, ajoutez-le à la table du panier. Ensuite, votre requête SQL ressemblera à ceci:

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

ok, j'ai une grille d'affichage des éléments, lorsque l'utilisateur clique sur le bouton «ajouter au panier». Une fois cliqué, l'itemID de l'article est placé dans une liste et tenu dans la session. après quoi l'utilisateur est dirigé vers la page du panier, où dans la page de chargement l'élément sélectionné sera rempli dans la grille de la page. Après quoi j'envoie les valeurs de l'arraylist à une chaîne séparée par des virgules ',' et par conséquent obtenir "3, 16, 12" le nom de la chaîne qui contient les valeurs est productIDs. J'ai essayé votre chemin, mais comment exactement puis-je attribuer la variable chaîne à la requête sql? merci – pier

1

Utilisez une fonction pour diviser votre chaîne délimitée dans une table:

Here is an example.

Ensuite, utilisez une procédure stockée comme ceci:

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

Puis lier votre gridview au résultat de la procédure stockée:

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 
    } 
Questions connexes