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

  1. #1
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut recuperer les valeurs des parametres d'une procedure stockée et les mettre dans un datagridview ou listview<?>
    Bonjour

    j'ai mi une requete select dans une procedure stockée, après avoir fait des MAJ de la BD, et je voulais recuperer les valeurs de select, mais elle m'envoie aucune valeur:

    voici le code:
    Code sql : 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
     
    ALTER PROCEDURE dbo.mat_etudiant
     
    	@pro nvarchar(5) ,
    	@ann nvarchar(12),
    	@mat int output,
    	@n nvarchar(70) output,
    	@p nvarchar(70) output
    AS
     
     
    declare @t as table ( id int not null IDENTITY , id_etudiant int not null, nom_etudiant VARCHAR(64) not null , PRIMARY KEY (id))
    insert into @t(id_etudiant, nom_etudiant) select e.id_etudiant, e.nom from etudiant as e join scolarite as s on e.id_etudiant=s.id_etudiant join promotion as p on s.id_promotion=p.id_promotion join annee_academique as a on s.id_annee=a.id_annee where p.promotion=@pro and a.annee_academique=@ann and e.affecte_matricule=0 order by e.nom
     
    insert into matricule(id_etudiant, matricule,nouveau) select id_etudiant, CAST(@pro AS VARCHAR(2)) + SUBSTRING('00', 1, 2 - LEN(CAST(id AS VARCHAR(03)))) + CAST(id AS VARCHAR(03)),1 from @t 
     
    update etudiant set affecte_matricule=1 where affecte_matricule=0
     
    --update nouveau set finish=1 where finish=0
     
    update matricule set nouveau=1
     
    select @mat=matricule, @n=nom, @p=prenom  from matricule m, etudiant e where m.id_etudiant=e.id_etudiant and m.nouveau=1


    code sur vb.net:
    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
    Dim cmd As SqlCommand = New SqlCommand()
            cmd.Connection = con
            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandText = "matricule_nv_etudiant"
     
            With cmd.Parameters
                .Add(New SqlParameter("@pro", CStr(cmb_promotion.SelectedItem)))
                .Add(New SqlParameter("@ann", CStr(cmb_annee.SelectedItem)))
                .Add(New SqlParameter("@mat", SqlDbType.Int))
                .Add(New SqlParameter("@n", SqlDbType.NVarChar, 70))
                .Add(New SqlParameter("@p", SqlDbType.NVarChar, 70))
     
            End With
            cmd.Parameters("@pro").Direction = ParameterDirection.Input
            cmd.Parameters("@ann").Direction = ParameterDirection.Input
            cmd.Parameters("@mat").Direction = ParameterDirection.Output
            cmd.Parameters("@n").Direction = ParameterDirection.Output
            cmd.Parameters("@p").Direction = ParameterDirection.Output
     
            cmd.ExecuteNonQuery()
     
            Dim dr As SqlDataReader = cmd.ExecuteReader()
            Dim lvi As New ListViewItem
     
            While cmd.ExecuteReader.HasRows
     
                lvi = New ListViewItem(New String() {cmd.Parameters("@mat").Value.ToString, cmd.Parameters("@n").Value.ToString, cmd.Parameters("@p").Value.ToString})
     
                liste.Items.Add(lvi)
            End While
     
            dr.Close()
    pourriez vous, svp, m'aider

    merci

  2. #2
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    svp
    j'aimerais lire les valeurs de select qui se trouve dans la procedure stockée, comment ferais je?

    merci

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    1ère chose tu exécute 3x la requete, une seule fois suffit !
    executenonquery execute la requete sans récupérer les valeur d'un éventuel select
    executereader execute la requete et permet de parcourir un retour de select

    dans les 2 cas on peut récupérer les valeurs des parameters sous certaines conditions
    mais vu que tu termines par un select tu pourrais simplement lire le retour

    pour lire un retour de select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim reader = cmd.Executeader
    while reader.read ' lignes
      reader.item(x) ' lecture des colonnes pour la ligne en cours
    end while
    pour récupérer les valeurs des parameters, en plus de les mettre output coté sql, il faut les mettre en direction.inputoutput ou output

    si tu fais du pas à pas, passes tu dans ton code qui lit les paramètres ? si oui ont ils la valeur prévue ?

  4. #4
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    j'ai appliqué ce que vous m'avez dit, mais je ne recupere rien, la procedure ne s'execute meme pas,


    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
    ALTER PROCEDURE dbo.matricule_nv_etudiant
     
    	@pro nvarchar(5) ,
    	@ann nvarchar(12)
    	--@mat int output,
    	--@n nvarchar(70) output,
    	--@p nvarchar(70) output
    AS
     
     
    declare @t as table ( id int not null IDENTITY , id_etudiant int not null, nom_etudiant VARCHAR(64) not null , PRIMARY KEY (id))
    insert into @t(id_etudiant, nom_etudiant) select e.id_etudiant, e.nom from etudiant as e join scolarite as s on e.id_etudiant=s.id_etudiant join promotion as p on s.id_promotion=p.id_promotion join annee_academique as a on s.id_annee=a.id_annee where p.promotion=@pro and a.annee_academique=@ann and e.affecte_matricule=0 order by e.nom
     
    insert into matricule(id_etudiant, matricule,nouveau) select id_etudiant, CAST(@pro AS VARCHAR(2)) + SUBSTRING('00', 1, 2 - LEN(CAST(id AS VARCHAR(03)))) + CAST(id AS VARCHAR(03)),1 from @t 
     
    update etudiant set affecte_matricule=1 where affecte_matricule=0
     
    --update nouveau set finish=1 where finish=0
     
    update matricule set nouveau=1
     
    select m.matricule, e.nom, e.prenom  from matricule m, etudiant e where m.id_etudiant=e.id_etudiant and m.nouveau=1 
    --select matricule  from matricule   where nouveau=1
    code vb.net
    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
     Dim cmd As SqlCommand = New SqlCommand()
            cmd.Connection = con
            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandText = "matricule_nv_etudiant"
     
            With cmd.Parameters
                .Add(New SqlParameter("@pro", CStr(cmb_promotion.SelectedItem)))
                .Add(New SqlParameter("@ann", CStr(cmb_annee.SelectedItem)))
                '.Add(New SqlParameter("@mat", SqlDbType.Int))
                '.Add(New SqlParameter("@n", SqlDbType.NVarChar, 70))
                '.Add(New SqlParameter("@p", SqlDbType.NVarChar, 70))
     
            End With
            cmd.Parameters("@pro").Direction = ParameterDirection.Input
            cmd.Parameters("@ann").Direction = ParameterDirection.Input
            'cmd.Parameters("@mat").Direction = ParameterDirection.Output
           ' cmd.Parameters("@n").Direction = ParameterDirection.Output
            'cmd.Parameters("@p").Direction = ParameterDirection.Output
     
     
            dr = cmd.ExecuteReader
            While dr.Read
     
                MsgBox(dr.item("matricule"))
            End While
     
            dr.Close()
    on m'affiche rien
    j'ai meme essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox(cmd.Parameters("@mat").Value.ToString)
    svp, pourriez vous m'aider?
    est ce que j'ai commis une erreur au niveau de la procèdure ?

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    exécutez le code pas à pas (F10)

  6. #6
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    c'est fait,
    il n'y'a rien pendant l'affichage
    au niveau de la BD, il y'a des changements, c'est à dire la procèdure s'execute mais, au niveau de l'affichage, malheureusement, non
    le datareader n'accede pas aux valeurs de select

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    vous voulez dire que l'executereader passe bien mais que ca ne rentre pas dans la boucle while dr.Read ?

  8. #8
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    oui

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    et ca passe bien sur dr.close ?

    la procédure stockée retourne un résultat dans sql server ?

  10. #10
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    oui il passe par dr.read et par dr.close mais msgbox, non
    si j’exécute la procédure stockée directement sur sql server, j'obtient des valeurs comme prévu.

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    tout m'a l'air bon pourtant ...
    reste à vérifier les valeurs des paramètres dans le programme, mais vous l'avez déjà fait apparemment ...

  12. #12
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Tu es sur quel type de projet (Web/WinForm/WPF...) ?

    Si tu es sur du Web, il est normal que MsgBox ne fonctionne pas.

  13. #13
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    c'est un projet winform

  14. #14
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    qu'est ce que je dois faire

  15. #15
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    Citation Envoyé par spring.time Voir le message
    qu'est ce que je dois faire
    bonne question ...

    entoure ton code d'un try/catch avec msgbox dans le catch

    modifies ta procédures stockées pour qu'elle fasse select 'test' as matricule seulement pour voir déjà si ca vient réellement du code vb ou de l'exécution du code sql dans le contexte

    la connexion pointe-t-elle réellement sur la base que tu penses ? pour le vérifier tu peux faire un create table dans le commandtext pour voir si la table apparait sur ta base

  16. #16
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    d'accord

  17. #17
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    j'ai ajouté try/catch, on m'affiche aucune erreur
    pour select 'test' as matricule, on m'affiche bien test, et je vois des maj au niveau de mes tables,

  18. #18
    Membre régulier Avatar de spring.time
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 294
    Points : 84
    Points
    84
    Par défaut
    cooool

    il faut que je renomme les colonnes de mon select avec la clause as comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select m.matricule as matricule
    , puis sur vb.net, je les appelle par
    je vous remercie infiniment, pour ces indications

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/08/2012, 14h23
  2. Réponses: 1
    Dernier message: 19/08/2008, 07h40
  3. Réponses: 1
    Dernier message: 31/05/2008, 13h00
  4. Réponses: 2
    Dernier message: 06/04/2007, 10h26
  5. [C#] Comment récupérer la valeur de retour d'une procédure stockée ?
    Par Jinroh77 dans le forum Accès aux données
    Réponses: 23
    Dernier message: 05/10/2006, 15h24

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