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 :

Afficher résultats d'une procédure stockée


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Points : 40
    Points
    40
    Par défaut Afficher résultats d'une procédure stockée
    Bonjour,
    J'ai une procédure stockée qui retourne plusieurs résultats grâce à un curseur.
    Comment afficher les résultats dans un grid?

    Merci

  2. #2
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    tu peut exécuter ton commande dans un sqldatareader dont tu peut parcourir pour extraire les résultats

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SqlDataReader _SqlDataReader = _SqlCommand.ExecuteReader();
     
    //read SqlDataReader
     while (_SqlDataReader .Read())
                    {
     
                    string field=   Convert.ToString(dr["field"]);//field un champ resultat de command
     
                   }
                _SqlDataReader .CloseDataReader();
    j’espère être claire

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Points : 40
    Points
    40
    Par défaut
    Je te remercie pour la réponse.

    J'ai fais comme tu dis mais j'ai cette erreur :

    Invalid attempt to call Read when reader is closed.
    Sais tu d'où cela vient?
    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
     
    SqlConnection conn = new SqlConnection();
                SqlCommand command = new SqlCommand("storeProc1", conn);
                command.Parameters.Add(new SqlParameter("@id", SqlDbType.Int));
                command.Parameters["@id"].Value = user.id;
                command.CommandType = CommandType.StoredProcedure;
                DataTable dt = new DataTable();
     
                try
                {
                    conn.Open();
     
                    SqlDataReader r = command.ExecuteReader();
                    while (r.Read())
                    {
                        dt.Load(r);
                    }
     
                    grid1.DataSource = dt;
                    grid1.DataBind();
                    grid1.Visible = true;
     
                }
                catch (SqlException e)
                {
                    //...
                }

  4. #4
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    Bonjour;
    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
     
    SqlConnection conn = new SqlConnection();
                SqlCommand command = new SqlCommand("storeProc1", conn);
                command.Parameters.Add(new SqlParameter("@id", SqlDbType.Int));
                command.Parameters["@id"].Value = user.id;
                command.CommandType = CommandType.StoredProcedure;
                DataTable dt = new DataTable();
     
                try
                {
                    conn.Open();
     
                    SqlDataReader r = command.ExecuteReader();
                    r.Read();
                    dt.Load(r);
     
                    grid1.DataSource = dt;
                    grid1.DataBind();
                    grid1.Visible = true;
     
                }
                catch (SqlException e)
                {
                    //...
                }
    pour ton cas c'est suffisant de faire un seul read() mais il va te retoutne ligne

    je préfère si tu connait les retournes de ta requête de lire ligne par ligne

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Points : 40
    Points
    40
    Par défaut
    Je viens de changer mon code.
    Je n'ai plus d'erreur mais ça ne me renvoie aucun résultat, alors que quand j'exécute ma procédure stockée dans SQL server, ça me renvoie bien les résultats escomptés

  6. #6
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    ok;

    il te renvoie quoi ton storeProc1les users ??

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Points : 40
    Points
    40
    Par défaut
    Il me renvoie les résultats d'une recherche.
    C'est une procédure stockée qui prend en id un id de recherche et qui va chercher dans ma table recherche, les id correspondant, et qui lance une recherche grâce à ça.

    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
    CREATE PROCEDURE [dbo].[proc1]
    	-- Add the parameters for the stored procedure here
    	@id int
    AS
    BEGIN
     
    	declare @result nvarchar(50)
    	DECLARE @request nvarchar(MAX) = 'SELECT DISTINCT AC.name, AC.firstname FROM ACT AS AC, USER AS US, USER_L AS USL
    									  WHERE AC.id = US.id'
     
    	DECLARE c1 CURSOR FOR 
        SELECT name FROM RESEARCH WHERE id = @id
        OPEN c1
        FETCH  c1 INTO @result 
    	WHILE @@FETCH_STATUS = 0
    		BEGIN
    			IF (@result = 'exp')	 
    				 SET @request = @request  + ' AND USL.id IN(SELECT id FROM L WHERE name LIKE ( ''%'+@p1+'%'' ) )
    				 OR AC.name LIKE (''%'+@p1+'%'')'
    			IF (@result = 'lan')	 
    				 SET @request = @request  + ' AND AC.name LIKE ''%'+@p2+'%'''
    		FETCH NEXT FROM c1 INTO @result
    		END		 
    	CLOSE c1
    	DEALLOCATE c1
        EXECUTE (@request);  
     
    END

  8. #8
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    j'ai rien compris de ton procédure!!?

    tu me dire a quoi sert exactement le procédure ?!

    On va voir comment extraire les données après !!

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Points : 40
    Points
    40
    Par défaut
    ^^

    J'ai une table RESEARCH dans ma base, qui contient pour un chaque id, les différents mots tapés par l'utilisateur dans une textbox.
    Donc ma clé primaire est id+nom paramètre.

    Dans ma procédure stockée, je récupère l'id de la recherche, et pour chaque paramètre associé a cette recherche, je regarde dans les tables de ma base de données, si il existe.

    En gros donc, ma procédure stockée prend l'id d'une recherche, effectue la recherche dans mes tables et renvoie les résultats (c'est une procédure pour un moteur de recherche).

  10. #10
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    si j'ai bien compris

    le résultat dépend de la recherche ;alors les retournes ne sont pas spécifiées à chaque fois ???

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Points : 40
    Points
    40
    Par défaut
    Oui, c'est ça

  12. #12
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    bonjour;

    tu peut recuperer les champs et les valeurs des champs par

    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
     
     conn.Open();
     
                    SqlDataReader r = command.ExecuteReader();
                    DataTable schemaTable = r.GetSchemaTable();
                    List<string> leschampsresultat = new List<string>();
                    foreach (DataRow row in schemaTable.Rows)
                       leschampsresultat.Add(row.ItemArray[0].ToString());
     
     
                    while (r.Read())
                    {
                        for (int i = 0; i < leschampsresultat.Count - 1; i++)
                        {
                            string champName = leschampsresultat[i];
                            string ChampValue = r[i].ToString();
    //ici tu peut faire tous ce que tu veux avec 
                        }
                    }

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Je n'ai rien compris à ce que tu as fais ... tu peux m'expliquer?
    Les champs et valeurs de mes champs sont dans ma table non?

    Lorsque je fais , cela me renvoie "null".

    C'est quels champs et quelles valeurs que tu récupères? Si ce sont les valeurs saisies par l'utilisateur, je les enregistre dans une table une fois le bouton cliqué, donc je les ai.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Points : 40
    Points
    40
    Par défaut
    En fait, ce que je veux c'est :

    J'ai une procédure stockée qui me renvoie x lignes de résultats en utilisant un curseur.
    Je veux juste récupérer toutes ces lignes et les mettre dans ma datagrid.
    J'ai peut être oublié quelque chose dans ma procédure stockée?
    J'utilise le curseur, mais je ne renvoie rien, c'est peut être là que ça cloche?

    A la fin de ma procédure stockée je fais


  15. #15
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    te renvoie la structure des résultats ( les nom des champs)

    mais vraiment essayer de suivre ce que tu veux faire avec mais j'ai rien compris

  16. #16
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    je voi que le result n'est pas initialié

    Citation Envoyé par Devlin111 Voir le message
    Il me renvoie les résultats d'une recherche.
    C'est une procédure stockée qui prend en id un id de recherche et qui va chercher dans ma table recherche, les id correspondant, et qui lance une recherche grâce à ça.

    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
    CREATE PROCEDURE [dbo].[proc1]
    	-- Add the parameters for the stored procedure here
    	@id int
    AS
    BEGIN
     
    	declare @result nvarchar(50)
    	DECLARE @request nvarchar(MAX) = 'SELECT DISTINCT AC.name, AC.firstname FROM ACT AS AC, USER AS US, USER_L AS USL
    									  WHERE AC.id = US.id'
     
    	DECLARE c1 CURSOR FOR 
        SELECT name FROM RESEARCH WHERE id = @id
        OPEN c1
        FETCH  c1 INTO @result 
    	WHILE @@FETCH_STATUS = 0
    		BEGIN
    			IF (@result = 'exp')	 
    				 SET @request = @request  + ' AND USL.id IN(SELECT id FROM L WHERE name LIKE ( ''%'+@p1+'%'' ) )
    				 OR AC.name LIKE (''%'+@p1+'%'')'
    			IF (@result = 'lan')	 
    				 SET @request = @request  + ' AND AC.name LIKE ''%'+@p2+'%'''
    		FETCH NEXT FROM c1 INTO @result
    		END		 
    	CLOSE c1
    	DEALLOCATE c1
        EXECUTE (@request);  
     
    END

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Points : 40
    Points
    40
    Par défaut
    Ça marche, désolé du dérangement, ça fonctionne bien avec la première solution.
    J'avais un problème dans mon code, j'incrémentais une variable à un endroit où je n'aurais pas du, donc je renvoyais un id non existant à ma procédure, voilà pourquoi je n'avais aucun résultats.

    Merci.

  18. #18
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    avec plaisir !!!!

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

Discussions similaires

  1. [Débutant] Afficher le résultat d'une procédure stockée dans des contrôles
    Par Bakkach dans le forum VB.NET
    Réponses: 4
    Dernier message: 20/05/2013, 18h08
  2. [MySQL] Problème pour afficher le résultat d'une procédure stockée sous forme de table html
    Par Baleze dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/12/2012, 16h15
  3. Afficher résultats d'une procédure stockée
    Par mercure07 dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 14/02/2012, 16h26
  4. [C#] Récupérer le résultat d'une procédure stockée
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 13h45

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