IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

passer un parametre sous forme de liste


Sujet :

C#

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut passer un parametre sous forme de liste
    Bonjour
    comment puis je passer un parametre sous forme de liste a une requete sql ?
    comment puis je passer un parametre sous forme de list a un tableadapter ?
    Comment puis je resortir tous les id du resultat d'une requete dans une meme colonne séparée par un ";" ?

    x1;x2;x3 x1 .....
    x1;x2;x3 x2 .....
    x1;x2;x3 x3 .....
    .merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Bonjour,

    Une requete sql ne prends en general pas de liste en parametres, bon sql serveur le peut via les UserDefined table mais bref passons.

    Ce qui est fait generalement c'est que l'on passe un string et que l'on effecture un double split: le premier pour isoler chaque parametre, le seconde pour separer cle de valeur.

    Sur le net tu trouvera des moyens de faire ce split pour chaue base de donnees.

    donc cela reponds aux question 1 et 2.



    Pur la troisieme: la methode la plus simple qui me vient a l'esprit est de le faire en c# via linq:

    imaginons que j'ai une table result ayant la colonne id:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var concatenated = string.Join(";",resultats.Select(a=>a.Id));

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Je n'ai pas encore trouvé de solution

    comment puis je passer une chaine a un tableadapter sous la forme : "x1;x2;x3"

    et quand je passe au generateur de requetes je lui donne la chaine
    je dois la séparer en list x1; x2
    et selectionner toutes les lignes ayant x1 comme id, x2 comme id, x3 comme id ???

    veuillez m'aider, je suis bloquée ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    Personnellement, je ne comprends absolument rien à ton problème.
    Soit plus précis s'il te plait.

    Cordialement

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    table value parameter
    ou sur des versions qui n'ont pas cette fonctionnalité une table temporaire

    et dans les cas une jointure
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    bonjour, j'ai pu avancer un petit peu mais je n'ai pas trouver toutes la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    -- Fonction qui permet de récupérer une chaine
    -- Retourne la valeur si elle est trouvé ou NULL si @Index supérieur au nombre d'occurence dans @Chaine
    CREATE FUNCTION [dbo].[SubVal]
    (
    	@Chaine VarChar(255),		-- Chaine contenant les valeurs
    	@Idx TinyInt,			-- Index de la valeur recherchée
    	@Separateur VarChar(5) = ';'	-- Séparateur des valeurs dans la chaine
    )  
    RETURNS VarChar(255)
    AS 
    BEGIN
    	Declare @Valeur VarChar(255)	-- Valeur de retour de la fonction
    	Declare @Pos Int		-- Position du curseur dans la chaine
    	Declare @Cpt Int		-- Compteur
     
    	SELECT @Cpt = 1, @Pos = 0, @Valeur=NULL
     
    	While (@Cpt < @Idx AND Charindex(@Separateur, @Chaine, @Pos+1)>@Pos)
    	Begin
    		SELECT @Cpt=@Cpt+1, @Pos=Charindex(@Separateur, @Chaine, @Pos+1)
    	End
     
    	IF @Cpt=@Idx
    		SET @Pos = @Pos + 1
    		IF Charindex(@Separateur, @Chaine, @Pos)>@Pos
    			SET @Valeur = ltrim(rtrim(Substring(@Chaine, @Pos, Charindex(@Separateur, @Chaine, @Pos)-@Pos)))
    		ELSE IF Charindex(@Separateur, @Chaine, @Pos)=@Pos
    			SET @Valeur = ''
    		ELSE
    			SET @Valeur = ltrim(rtrim(Substring(@Chaine, @Pos, 255)))
     
    	RETURN @Valeur
    END
    j'ai crée cette fonction qui marche bien sauf que je dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT dbo.SubVal('x1;x2,x3', 1, ';') retourne x1
    SELECT dbo.SubVal('x1;x2,x3', 2, ';') retourne x2
    SELECT dbo.SubVal('x1;x2,x3', 3, ';') retourne x3
    je cherche quelque choses comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for (int i = 0; i< NombreElementDeLaChaine;i++)
    SELECT dbo.SubVal('x1;x2,x3', i, ';') retourne x1
    pour qu'elle me retourne tous les elements et non pas un par un sachant que ne je ne sais pas le NombreElementDeLaChaine ??


  7. #7
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    j'ai refais ma solution comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    declare @NbrAos SMALLINT;
    set @NbrAos = (SELECT dbo.NombreAOs('x1;x2;x3', ';')) ;
    SET @NbrAos = @NbrAos + 1;
     
    DECLARE @I   SMALLINT = 1; 
     
    WHILE @I <= @NbrAos
    BEGIN 
      SELECT dbo.SubVal('x1;x2;x3', @I, ';')
       Set @I = @I+1; 
    END
    le resultat est super bien sauf que au lieu de me retourner :
    resultat :
    x1
    x2
    x3

    elle me renvoi 3 resultat :
    Resultat
    x1

    Resultat
    x2

    Resultat
    x3

  8. #8
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    j'ai résolu mon probleme comme suit :

    mon tableadapter contient la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT     @groupAO AS AOs, id, NumAO, IntituleFR, IntituleAR, DatePublication
    FROM         Appelsdoffre
    WHERE     (NumAO IN
                              (SELECT     items
                                FROM          dbo.Split(@groupAO, ';') AS Split_1))
    order by DateOuverture asc
    et le split est une fonction qui divise la chaine x1;x2;x3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    USE [D_Services]
    GO
     
    /****** Object:  UserDefinedFunction [dbo].[Split]    Script Date: 02/23/2016 10:37:10 ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    create FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1))       
    returns @temptable TABLE (items varchar(MAX))       
    as       
    begin      
        declare @idx int       
        declare @slice varchar(8000)       
     
        select @idx = 1       
            if len(@String)<1 or @String is null  return       
     
        while @idx!= 0       
        begin       
            set @idx = charindex(@Delimiter,@String)       
            if @idx!=0       
                set @slice = left(@String,@idx - 1)       
            else       
                set @slice = @String       
     
            if(len(@slice)>0)  
                insert into @temptable(Items) values(@slice)       
     
            set @String = right(@String,len(@String) - @idx)       
            if len(@String) = 0 break       
        end   
    return 
    end;
    GO

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passer les infos sous forme de colonne en ligne
    Par kssillati dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/01/2008, 10h38
  2. [MySQL] Récupérer les données sous forme de liste déroulante
    Par loopback dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 26/12/2007, 16h10
  3. Action de menu sous forme de liste
    Par frog43 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/12/2007, 13h33
  4. afficher des données sous forme de liste
    Par yannick9 dans le forum VBA Access
    Réponses: 4
    Dernier message: 02/08/2007, 14h32
  5. Réponses: 5
    Dernier message: 08/03/2006, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo