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

ASP.NET Discussion :

Cast d'un résultat de requête


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Cast d'un résultat de requête
    Bonjour à tous.

    J'ai un souci de cast sur un résultat de requête que je ne comprends pas trés bien, certainement parce que je ne suis pas encore trés familier avec la syntaxe C#

    Voici la procédure qui fait la requête :
    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
    public String RetournerScalaire(string rq, SqlParameter[] param)
            {
                string strRetour = "";
                try
                {
                    using (SqlConnection sqlcon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DataDev"].ConnectionString))
                    {
                        //on assigne une requête paramétrée à la commande
                        using (SqlCommand cmd = new SqlCommand(rq))
                        {
                            //on lui assigne une connexion
                            cmd.Connection = sqlcon;
                            //on lui ajoute les paramettres
                            cmd.Parameters.AddRange(param);
                            using (SqlDataAdapter Adaptateur = new SqlDataAdapter(cmd))
                            {
                                using (SqlCommandBuilder oCmdBuilder = new SqlCommandBuilder(Adaptateur))
                                {
                                    sqlcon.Open();
                                    strRetour = (string)cmd.ExecuteScalar();
                                }
                            }
                        }
                    }
                }
                catch (SqlException ex)
                {
                    SystemC.Outils.Logage(ex.Message);
                    SystemC.Outils.Logage(rq);
                }
                return strRetour;
            }
    La requête que je lui envoi me retourne un chiffre à la suite d'un COUNT(*) et lorsque je l'excécute il me dit :
    Impossible d'effectuer un cast d'un objet de type 'System.Int32' en type 'System.String'.
    Sur le cmd.ExecuteScalar().

    Le contournement que j'ai trouvé est simple : je fais le Cast dans la requête.
    Mais j'aimerais comprendre pourquoi je peux pas caster directement dans mon code tel que je l'ai fais.
    Peut-être dois je utiliser une autre méthode pour caster.
    Dans ma Fonction je peux recevoir n'importe quel type de résultat, c'est dans la suite du code que je m'occupe de gérer le type exact du retour.
    J'ai pensé passer par une string parce que c'est le type qui accepte toute sorte de format et que l'on peut recaster vers n'importe quel autre type.

    Pouvez vous m'éclairer ?

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Tu ne peux pas caster un int en string
    Tu peux faire un .ToString() par contre

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 85
    Par défaut
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strRetour = cmd.ExecuteScalar().ToString();

  4. #4
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci les gars, ça marche bien.

    Mais j'ai tout de même du mal à comprendre : je peux pas caster un Int en String comme ça, mais si je mets un ToString ça marche.

    Pourtant, ToString, c'est bien caster le truc en String, peu importe le type de départ ?

    Là, ça m'échappe quand même.

  5. #5
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    .ToString n'est pas un cast

  6. #6
    Membre confirmé Avatar de Yosko
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2008
    Messages : 61
    Par défaut
    Pas forcément.
    Je ne sais pas dans les détails, mais à priori, la méthode ToString peut être implémentée différemment selon les types d'objet, et ne se contente pas forcément de faire un simple cast.
    D'un point de vue fonctionnel, les deux méthodes nous semblent kif kif, mais d'un point de vue technique la manière d'aborder le truc diffère.

  7. #7
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ok merci pour les explications, je comprends mieux.

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

Discussions similaires

  1. [MySQL] Affichage de 2 lignes d'un résultat de requête
    Par JohanProg dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/10/2005, 15h42
  2. Réponses: 7
    Dernier message: 26/09/2005, 17h50
  3. table comme résultat de requête
    Par nafnaf625 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/05/2005, 11h51
  4. Comparaison de résultats de requêtes
    Par Nyx de Tours dans le forum Requêtes
    Réponses: 7
    Dernier message: 31/07/2004, 15h49
  5. Trier aléatoirement un résultat de requête
    Par ang36 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/01/2004, 17h38

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