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 :

lire une seule valeur depuis une procedure stockée


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 lire une seule valeur depuis une procedure stockée
    Bonjour, j'ai une procedure stockée qui doit me retourner une seule valeur, au niveau de mon codage, j'ai pas pu lire cette seule valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public System.Data.SqlClient.SqlDataReader LoadMaxByYear(short annee)
            {
                System.Data.SqlClient. oOleDbDataReader;
                try
                {
                    m_SqlClient.CreateCommand(System.Data.CommandType.StoredProcedure, "SelectMaxByYear");
                    m_SqlClient.AddCommandParameter("@DateBV", System.Data.SqlDbType.Int, annee);
                    oOleDbDataReader = ()m_SqlClient.ChargerValeur();            }
                catch (Exception ex)
                {
                    throw ex;
                }
                return oOleDbDataReader;
            }

  2. #2
    Membre confirmé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Points : 610
    Points
    610
    Par défaut
    Bonjour MSysteme,

    Je crois qu'il te manque quelques lignes dans ton code

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SqlCommand command = m_SqlClient.CreateCommand();
    ...
    m_SqlClient.Open();
    SqlDataReader reader = command.ExecuteReader();
    return reader ;

    En espérant que ça t'aide !

    @+

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je suis pas sûr de bien comprendre ton problème... En plus ton code n'a aucun sens . Qu'est-ce que c'est que ce "m_SqlClient" ? Une variable de type SqlConnection je suppose ? Si c'est ça, la méthode CreateCommand ne prend aucun paramètre... Et pourquoi est-ce que ta méthode renvoie un SqlDataReader si tu as juste besoin d'une valeur ? Elle devrait pas plutôt renvoyer directement la valeur ? Et que vient faire ce "oOleDbDataReader" dans l'histoire ?

    Pour exécuter une requête (ou un appel à une procédure stockée) qui renvoie une seule valeur, on utilise la méthode ExecuteScalar() de la commande. Il faut ensuite caster le résultat vers le type attendu. Par exemple si ta procédure stockée renvoie un int :

    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
            public int LoadMaxByYear(short annee)
            {
     
                try
                {
                    SqlCommand command = m_SqlClient.CreateCommand();
                    command.CommandType = CommandType.StoredProcedure;
                    command.CommandText = "SelectMaxByYear";
                    command.Parameters.Add("@DateBV", System.Data.SqlDbType.Int)).Value = annee;
                    return (int)command.ExecuteNonQuery()
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                return oOleDbDataReader;
            }

  4. #4
    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 modifié comme vous m'avez conseillé mais il me dit que le oOleDbDataReader n'existe pas dans le contexte actuel

    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
             public int LoadMaxByYear(short annee)
            {
     
                try
                {
                    SqlCommand command = m_SqlClient.CreateCommand(System.Data.CommandType.StoredProcedure, "SelectMaxByYear");
                    command.Parameters.Add("@AnneeBV", System.Data.SqlDbType.Int).Value = annee;
                    return (int)command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                return oOleDbDataReader;
            }

  5. #5
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    retires cette ligne qui n'a plus lieu d'être...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     return oOleDbDataReader;
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Et au passage, enlève le try/catch. Il ne sert à rien puisque tu relances l'exception aussitôt, et en plus en faisant throw ex tu perds la pile originale de l'exception.

  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
    Merci et comment dois je définir mon datat reader, d'ailleurs je met quelque choses comme ca pour que je puisse appeler ma methose dans mon interface :

    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
            public void LoadMaxBVByDate(short annee)
            {
                System.Data.SqlClient.SqlDataReader oDBDataReader;
     
                try
                {
                    oDBDataReader = oBData.LoadDeclarationsByagrement(Agrement, annee);
                    while (oDBDataReader.Read())
                    {
                        Entity.DECLARARION oDeclaration;
                        oDeclaration = new Entity.DECLARARION();
                        oDeclaration.AgrCVT = Convert.ToString(oDBDataReader["AgrCVT"]);
                        oDeclaration.AnneeDec = Convert.ToInt16(oDBDataReader["AnneeDec"]);
                        oDeclaration.DateDec = Convert.ToDateTime(oDBDataReader["DateDec"]);
     
                        this.Add(oDeclaration);
                    }
                    oBData.CloseDataReader();
                    oBData.CloseConnection();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    Mais maintenant je n'ai qu'une seule valeur

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je comprends rien à ce que tu racontes

    Comme je l'ai dit plus haut, si tu n'as qu'une seule valeur tu n'as pas besoin d'un data reader, il y a la méthode ExecuteScalar qui te renvoie directement la valeur

  9. #9
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 166
    Points : 7 418
    Points
    7 418
    Billets dans le blog
    1
    Par défaut
    C'est pas ExecuteScalar plutôt ?
    On ne jouit bien que de ce qu’on partage.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    C'est pas ExecuteScalar plutôt ?
    Euh oui, c'est d'ailleurs ce que j'avais dit plus haut... merci, c'est corrigé

Discussions similaires

  1. Mise à jour d'une seule colonne depuis une table existante
    Par marc73450 dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/04/2013, 11h14
  2. envoyer des valeurs depuis une page web a une autre
    Par freddy000 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/01/2011, 13h23
  3. Réponses: 3
    Dernier message: 13/10/2010, 19h09
  4. récuperer une seule valeur depuis une PS
    Par Msysteme dans le forum C#
    Réponses: 1
    Dernier message: 15/03/2010, 13h01
  5. [XSD] unicité d'une seule valeur d'une énumération
    Par DoubleU dans le forum Valider
    Réponses: 2
    Dernier message: 19/06/2009, 16h05

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