Requete avec jointure

elmotardo Messages postés 17 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 29 mai 2008 - 7 mai 2008 à 10:16
elmotardo Messages postés 17 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 29 mai 2008 - 9 mai 2008 à 12:17
bonjour,
je dois faire une requete avec une jointure de 2 tables, quand je fais la requête avec l'outile "requête" proposé par visual studio, ça me donne bien ce que je veux mais  quand je fais la même requête dans ma classe c# il n'en veut pas, il rentre bien dans le try mais pas dans la boucle.

voici le code :
oCommand new SqlCommand("SELECT PRODUIT_CHAMP_CUSTOM.*, CHAMPS_CUSTOM.* FROM PRODUIT_CHAMP_CUSTOM INNER JOIN CHAMPS_CUSTOM ON PRODUIT_CHAMP_CUSTOM.CH_ID CHAMPS_CUSTOM.CH_ID WHERE (PRODUIT_CHAMP_CUSTOM.PDT_ID = '"+idProduit+"') AND (PRODUIT_CHAMP_CUSTOM.PRODUIT_CHAMP_CUST_ID <> 28)", _connexion);
        try
        {
            connexion();
            ArrayList champsCustom = new ArrayList();
            SqlDataReader champCustom = oCommand.ExecuteReader();
            while (champCustom.Read())
            {
                produit.setIngredients("test");
                if ( champCustom["PRODUIT_CHAMP_CUSTOM.CHAMP_VALEUR_STRING"] != DBNull.Value )
                {
                    champsCustom.Add(new Double(champCustom["CHAMPS_CUSTOM.CH_NOM"].ToString(), champCustom["PRODUIT_CHAMP_CUSTOM.CHAMP_VALEUR_STRING"].ToString()));
                }
            }
            produit.setChampsCustom(champsCustom);
        }
        catch
        {
        }
        deconnexion();

merci d'avance

10 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 mai 2008 à 23:05
Salut,

Déjà, renseigne toi sur les requêtes paramétrées.
PRODUIT_CHAMP_CUSTOM.PDT_ID est de quel type ?

/*
coq
MVP Visual C#
CoqBlog
*/
0
elmotardo Messages postés 17 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 29 mai 2008
9 mai 2008 à 08:49
je vais voir pour les requêtes parametrées, merci du conseil.
Quand au champ PRODUIT_CHAMP_CUSTOM.PDT_ID c'est un int tout ce qu'il y a de plus classique
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
9 mai 2008 à 09:15
Oui donc il doit difficilement apprécier de recevoir la valeur entre quotes.
La requête paramétrée résoudra ceci aussi.

/*
coq
MVP Visual C#
CoqBlog
*/
0
elmotardo Messages postés 17 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 29 mai 2008
9 mai 2008 à 10:16
bon je viens de tester et ça ne donne rien de plus, voici le nouveau code
string sql "SELECT PR.*, CH.* FROM PRODUIT_CHAMP_CUSTOM AS PR INNER JOIN CHAMPS_CUSTOM AS CH ON PR.CH_ID CH.CH_ID WHERE (PR.PDT_ID = @idProduit) AND (PR.PRODUIT_CHAMP_CUST_ID <> @idNonVoulu)";
            SqlCommand cmd = new SqlCommand(sql,_connexion);
            DbParameter paramIdProduit = cmd.CreateParameter();
            paramIdProduit.ParameterName = "@idProduit";
            paramIdProduit.DbType = DbType.Int32;
            paramIdProduit.Value = int.Parse(idProduit);

            DbParameter paramIdNonVoulu = cmd.CreateParameter();
            paramIdNonVoulu.ParameterName = "@idNonVoulu";
            paramIdNonVoulu.DbType = DbType.Int32;
            paramIdNonVoulu.Value = 28;

            cmd.Parameters.Add(paramIdProduit);
            cmd.Parameters.Add(paramIdNonVoulu);

            try
            {
                connexion();

                ArrayList champsCustom = new ArrayList();
                SqlDataReader c = cmd.ExecuteReader();
               
                while (c.Read())
                {
                    champsCustom.Add(new Double("toto","tata"));
                    if (c["PR.CHAMP_VALEUR_STRING"] != DBNull.Value)
                    {
                        champsCustom.Add(new Double(c["CH.CH_NOM"].ToString(), c["PR.CHAMP_VALEUR_STRING"].ToString()));
                    }
                }
                produit.setChampsCustom(champsCustom);
            }
            catch { }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
9 mai 2008 à 11:10
Et donc que se passe t'il  ? Pas d'entrée dans la boucle (aucune entrée dans le jeu de résultats) ou erreur d'execution ?

/*
coq
MVP Visual C#
CoqBlog
*/
0
elmotardo Messages postés 17 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 29 mai 2008
9 mai 2008 à 11:29
pas d'entrée dans la boucle et il s'arrete au cmd.Read, les instructions après ne sont pas exécuter
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
9 mai 2008 à 11:34
La structure try/catch n'est pas faite pour étouffer les erreurs mais pour les gérer, car là c'est visiblement le cas.

/*
coq
MVP Visual C#
CoqBlog
*/
0
elmotardo Messages postés 17 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 29 mai 2008
9 mai 2008 à 12:06
j'ai "catché" les exceptions et voilà ce que ça me donne ->

Une exception de première chance de type 'System.Data.SqlClient.SqlException' s'est produite dans System.Data.dll
Une exception de première chance de type 'System.InvalidOperationException' s'est produite dans System.Data.dll
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
9 mai 2008 à 12:09
Heu oui, mais logiquement c'est le reste des détails de la première (SqlException) qui sont réellement parlants, car là c'est vague.

/*
coq
MVP Visual C#
CoqBlog
*/
0
elmotardo Messages postés 17 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 29 mai 2008
9 mai 2008 à 12:17
bon bah c'est bon j'ai résolu le dernier problème, il y avait juste une erreur de frappe, merci bien de ton aide Coq.
0
Rejoignez-nous