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 ?