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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    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 éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    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 : 43
    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
    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 éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    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 Expert 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
    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;

  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 : 43
    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
    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 éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    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 : 43
    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
    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

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