begin process at 2008 07 23 23:31:36
1 215 377 membres
516 nouveaux aujourd'hui
14 174 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : requete avec jointure [ Base de données / SQL Server ] (elmotardo)

requete avec jointure le 07/05/2008 10:16:15

elmotardo
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

Re : requete avec jointure le 08/05/2008 23:05:09

coq
(Admin CS)
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
*/

Re : requete avec jointure le 09/05/2008 08:49:47

elmotardo
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

Re : requete avec jointure le 09/05/2008 09:15:35

coq
(Admin CS)
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
*/

Re : requete avec jointure le 09/05/2008 10:16:03

elmotardo
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 { }

Re : requete avec jointure le 09/05/2008 11:10:18

coq
(Admin CS)
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
*/

Re : requete avec jointure le 09/05/2008 11:29:56

elmotardo
pas d'entrée dans la boucle et il s'arrete au cmd.Read, les instructions après ne sont pas exécuter

Re : requete avec jointure le 09/05/2008 11:34:59

coq
(Admin CS)
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
*/

Re : requete avec jointure le 09/05/2008 12:06:24

elmotardo
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





Re : requete avec jointure le 09/05/2008 12:09:28

coq
(Admin CS)
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
*/


[Page 1 Page 2]
Classé sous : champ, champs, produit, custom, champcustom

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS