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

InfoPath .NET Discussion :

Webservice OK, infopath renvoi vide


Sujet :

InfoPath .NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Webservice OK, infopath renvoi vide
    Bonjour à tous,

    J'ai cree un webservice qui me renvoi des données d'une table sql server par un SELECT et qui test si le dataset est vide.

    S'il est vide il fait un SÉLECT particulier qui me renvoi obligatoirement des valeurs par défaut ajouter dans ma table Sql.

    Il y a donc un if dans mon web service qui me renvoie Ds2 si Ds est vide, sinon il me renvoi Ds.

    Dans infopath, ces résultats s'affichent dans un menu déroulant.

    Mon web service demande 3 valeurs (nfacture, codeproduit, AT)

    En test par visual studio, il me renvoie exactement ce que je veux.
    Le web service fonctionne parfaitement.

    Dans infopath, je crée la connection de donnée et en fonction des échantillons que je met il me renvoie soit ce qu'il faut, soit rien.

    Par contre, pour tester j'ai lié le résultat de la requête a un tableau extensible.

    Dans le cas ou ca ne fonctionne pas, ce tableau m'affiche pourtant le bon nombre de ligne qu'il est supposé trouver mais vide.

    Cela vient-il des échantillons que je lui indique ?

    J'ai également tester en les précisant moi même dans des champs les valeurs envoyé à mon web service. mes liaisons à la connection de donnée sont donc correct.

    Je suis dans l'impasse.

  2. #2
    Membre du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    J'ai eu un peu le même souci que toi.

    Précise un petit peu stp :

    -Le type de tes paramètres.
    Dans le cas ou ca ne fonctionne pas, ce tableau m'affiche pourtant le bon nombre de ligne qu'il est supposé trouver mais vide.

    Cela vient-il des échantillons que je lui indique ?
    pas compris ca ^^

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Pas facile a expliquer sans mettre 40 screenshots et 50 lignes de codes
    En faite, normalement je veux que le resultat s'affiche dans un menu deroulant.

    Celui-ci est vide qd la valeur d'echantillon que je precise a la connection de donnée ne renvoie pas le meme dataset.(if ds vide alors afficher Ds2 sinon afficher Ds)

    Si ma valeur d'echantillon entre dans le "alors" les resultats qui viennent du "sinon" me renvoie vide. et inversement.

    Pour revenir au tableau.
    Voyant que mon menu déroulant restait vide dans certain cas, j'ai lié le Data du web service a un tableau extensible.

    Pour 2 cas données :
    Le 1er me renvoie 4 lignes.
    Comme c'est le meme cas que mon échantillon, mon tableau affiche bien les 4 lignes et les valeurs correspondantes.

    Le 2eme cas ne correspond pas a l'échantillon, mon tableau s'étend à 5 lignes (ce qui correspond à ce que j obtiens par mon web service en test local) mais ces lignes sont vide.

    Mon tableau s'étend correctement au nombre de ligne qu'il doit recevoir mais soit elles sont vides, soit elles sont correctement remplis.

    Infopath sait donc qu'il y a n résultat mais les affiche pas forcement.

    J'espère avoir était clair

  4. #4
    Membre du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    Ton web service est programmé en quel langage ?

    Si c'est en c# j'ai ptet une astuce

  5. #5
    Membre du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    Si tu code en C#, je te conseille d'envoyer un ArrayList a Infopath plutot qu'un Dataset, j'avais eu quelques problèmes avec l'utilisation des dataset.
    Tu renvoie simplement un arraylist contenant tes valeurs. Ensuite dans Infopath tu fais la manipulation suivante :

    -Clic droit sur ta listbox, propriétés
    -Dans "Entrées de la zone de liste, tu coches "Rechercher des valeurs dans une connexion de données ..."
    -Tu ajoute ton webservice, sans passer de valeurs échantillons.
    -Dans Entrées, tu cliques sur la petite icône à gauche et la tu selectionne Data Field, tu prends la derniere entrée, normalement c'est LeNomDeTaConnexion:Result

    Et normalement, ca récupere le ArrayList et ca le copie dans la listbox

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Tout d'abord merci de ton aide.

    Il est justement codé en C#

    Tu as deja rencontré le cas ?

    Voila ma Webmethod

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    [WebMethod]
            public DataSet GetProcess(string nfacture, string codeproduit, string at)
            {
                SqlConnection cn = new SqlConnection("server=serveurdev;uid=***;pwd=***;Trusted_Connection=Yes;database=***");
     
                string QueryProcess = "SELECT action,destinataire,suivi FROM conditions WHERE marque IN (" +
     
                    "SELECT marque FROM produits WHERE codeproduit LIKE '%" + codeproduit + "%' )" +
     
                    "AND [gm] IN (" +
     
                    "SELECT [gm] FROM [Boulanger].[dbo].[produits] WHERE [codeproduit] LIKE '%" + codeproduit + "%' )" +
     
                    "AND [at] LIKE '%" + at + "%' " +
     
                    "AND (DATEDIFF(day, (" +
     
                    "SELECT [date_achat] FROM [Boulanger].[dbo].[factures] WHERE [nfacture] LIKE '%" + nfacture + "%'), GETDATE()) >= [jmin]) " +
     
                    "AND (DATEDIFF(day, (" +
     
                    "SELECT [date_achat] FROM [Boulanger].[dbo].[factures] WHERE [nfacture] LIKE '%" + nfacture + "%'), GETDATE()) <= [jmax])";
     
     
     
                string QueryProcess2 = "SELECT Action FROM conditions WHERE marque = 'AUTRE'";
     
     
                SqlDataAdapter Process = new SqlDataAdapter(QueryProcess, cn);
                SqlDataAdapter Process2 = new SqlDataAdapter(QueryProcess2, cn);
     
     
                DataSet Ds = new DataSet();
                DataSet Ds2 = new DataSet();
     
                cn.Open();
     
                Process.Fill(Ds, "Process");
                Process2.Fill(Ds2, "Process");
     
                if (Ds.Tables[0].Rows.Count == 0)
                {
                    cn.Close();
                    cn = null;
                    Process = null;
                    Process2 = null;
     
                    return Ds2;
                }
                else
                {
                    cn.Close();
                    cn = null;
                    Process = null;
                    Process2 = null;
     
                    return Ds;
                }

  7. #7
    Membre du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    Bon je t'ai modifié le code pour que ca renvoie un Arraylist et j'ai au passage corrigé les paramètres car moi j'avais eu plusieurs problèmes (à cause des paramètres et aussi à cause du dataset)

    Ceci est ma structure de webservice, elle fonctionne chez moi, y'a pas de raison que ca marche pas pour toi

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    [WebMethod]
        public ArrayList GetProcess(string nfacture, string codeproduit, string at)
        {
            SqlConnection cn = new SqlConnection("server=serveurdev;uid=***;pwd=***;Trusted_Connection=Yes;database=***");
     
            string QueryProcess = "SELECT action,destinataire,suivi FROM conditions WHERE marque IN (" +
     
                "SELECT marque FROM produits WHERE codeproduit LIKE '%@CodeProduit%' )" +
     
                "AND [gm] IN (" +
     
                "SELECT [gm] FROM [Boulanger].[dbo].[produits] WHERE [codeproduit] LIKE '%@CodeProduit%' )" +
     
                "AND [at] LIKE '%@at%' " +
     
                "AND (DATEDIFF(day, (" +
     
                "SELECT [date_achat] FROM [Boulanger].[dbo].[factures] WHERE [nfacture] LIKE '%@nfacture%'), GETDATE()) >= [jmin]) " +
     
                "AND (DATEDIFF(day, (" +
     
                "SELECT [date_achat] FROM [Boulanger].[dbo].[factures] WHERE [nfacture] LIKE '%@nfacture%'), GETDATE()) <= [jmax])";
     
            string QueryProcess2 = "SELECT Action FROM conditions WHERE marque = 'AUTRE'";
     
            cn.Open();
            SqlCommand maCommande = cn.CreateCommand();
            maCommande.CommandType = CommandType.Text;
            maCommande.CommandText = QueryProcess;
            qlCommand maCommande2 = cn.CreateCommand();
            maCommande2.CommandType = CommandType.Text;
            maCommande2.CommandText = QueryProcess2;
     
            SqlParameter param = maCommande.CreateParameter();
            param.ParameterName = "@nfacture";
            param.DbType = DbType.String;
            param.Value = nfacture;
     
            SqlParameter param2 = maCommande.CreateParameter();
            param2.ParameterName = "@CodeProduit";
            param2.DbType = DbType.String;
            param2.Value = CodeProduit;
     
            SqlParameter param3 = maCommande.CreateParameter();
            param.ParameterName = "@at";
            param.DbType = DbType.String;
            param.Value = at;
     
            SqlDataReader monCurseur = maCommande.ExecuteReader();
            ArrayList TabResult = new ArrayList();
            while (monCurseur.Read())
            {
                TabResult.Add(monCurseur.GetValue(0) + "*" + monCurseur.GetValue(1) + "*" + monCurseur.GetValue(2));
            }
     
            if (TabResult.Count == 0)
            {
                SqlDataReader monCurseur2 = maCommande2.ExecuteReader();
                ArrayList TabNoResult = new ArrayList();
                while (monCurseur2.Read())
                {
                    TabNoResult.Add(monCurseur2.GetValue(0));
                }
                cn.Close();
                return TabNoResult;
            }
            cn.Close();
            return TabResult;
        }
    dis moi si y'a un souci

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Je n'en demandais pas tant
    Un énorme merci à toi.

    Mais il m'indique une erreur quand je le test.

    Çà m'indique que le datareader est déjà ouvert et qu'il faut le fermer avant
    en me désignant cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlDataReader monCurseur = maCommande.ExecuteReader();
    Pourtant il n'est pas déclaré avant.

  9. #9
    Membre du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    De rien, on m'a beaucoup aidé sur ce fofo, c'est normal que j'aide à mon tour ^^

    Sinon pour l'erreur, vérifie cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qlCommand maCommande2 = cn.CreateCommand();
    j'ai oublié le S de SqlCommand, c'est ptet ca, je ne sais pas ^^

    EDIT : oups, j'ai aussi oublié d'ajouter les paramètres à la commande, excuse moi je modifie le fichier code plus haut, ce qui donne :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    [WebMethod]
        public ArrayList GetProcess(string nfacture, string codeproduit, string at)
        {
            SqlConnection cn = new SqlConnection("server=serveurdev;uid=***;pwd=***;Trusted_Connection=Yes;database=***");
     
            string QueryProcess = "SELECT action,destinataire,suivi FROM conditions WHERE marque IN (" +
     
                "SELECT marque FROM produits WHERE codeproduit LIKE '%@CodeProduit%' )" +
     
                "AND [gm] IN (" +
     
                "SELECT [gm] FROM [Boulanger].[dbo].[produits] WHERE [codeproduit] LIKE '%@CodeProduit%' )" +
     
                "AND [at] LIKE '%@at%' " +
     
                "AND (DATEDIFF(day, (" +
     
                "SELECT [date_achat] FROM [Boulanger].[dbo].[factures] WHERE [nfacture] LIKE '%@nfacture%'), GETDATE()) >= [jmin]) " +
     
                "AND (DATEDIFF(day, (" +
     
                "SELECT [date_achat] FROM [Boulanger].[dbo].[factures] WHERE [nfacture] LIKE '%@nfacture%'), GETDATE()) <= [jmax])";
     
            string QueryProcess2 = "SELECT Action FROM conditions WHERE marque = 'AUTRE'";
     
            cn.Open();
            SqlCommand maCommande = cn.CreateCommand();
            maCommande.CommandType = CommandType.Text;
            maCommande.CommandText = QueryProcess;
            SqlCommand maCommande2 = cn.CreateCommand();
            maCommande2.CommandType = CommandType.Text;
            maCommande2.CommandText = QueryProcess2;
     
            SqlParameter param = maCommande.CreateParameter();
            param.ParameterName = "@nfacture";
            param.DbType = DbType.String;
            param.Value = nfacture;
            maCommande.Parameters.Add(param);
     
            SqlParameter param2 = maCommande.CreateParameter();
            param2.ParameterName = "@CodeProduit";
            param2.DbType = DbType.String;
            param2.Value = CodeProduit;
            maCommande.Parameters.Add(param2);
     
            SqlParameter param3 = maCommande.CreateParameter();
            param.ParameterName = "@at";
            param.DbType = DbType.String;
            param.Value = at;
            maCommande.Parameters.Add(param3);
     
     
            SqlDataReader monCurseur = maCommande.ExecuteReader();
            ArrayList TabResult = new ArrayList();
            while (monCurseur.Read())
            {
                TabResult.Add(monCurseur.GetValue(0) + "*" + monCurseur.GetValue(1) + "*" + monCurseur.GetValue(2));
            }
     
            if (TabResult.Count == 0)
            {
                SqlDataReader monCurseur2 = maCommande2.ExecuteReader();
                ArrayList TabNoResult = new ArrayList();
                while (monCurseur2.Read())
                {
                    TabNoResult.Add(monCurseur2.GetValue(0));
                }
                cn.Close();
                return TabNoResult;
            }
            cn.Close();
            return TabResult;
        }

  10. #10
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'ai remodifier quelques lignes, il manquait je pense les parametres pour maCommande2.
    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
    33
    34
    35
    36
     
    SqlParameter param = maCommande.CreateParameter();
            param.ParameterName = "@nfacture";
            param.DbType = DbType.String;
            param.Value = nfacture;
            maCommande.Parameters.Add(param);
     
            SqlParameter param2 = maCommande.CreateParameter();
            param2.ParameterName = "@CodeProduit";
            param2.DbType = DbType.String;
            param2.Value = CodeProduit;
            maCommande.Parameters.Add(param2);
     
            SqlParameter param3 = maCommande.CreateParameter();
            param.ParameterName = "@at";
            param.DbType = DbType.String;
            param.Value = at;
            maCommande.Parameters.Add(param3);
     
            SqlParameter param4 = maCommande2.CreateParameter();
            param4.ParameterName = "@at";
            param4.DbType = DbType.String;
            param4.Value = at;
            maCommande2.Parameters.Add(param4);
     
            SqlParameter param5 = maCommande2.CreateParameter();
            param5.ParameterName = "@at";
            param5.DbType = DbType.String;
            param5.Value = at;
            maCommande2.Parameters.Add(param5);
     
            SqlParameter param6 = maCommande2.CreateParameter();
            param6.ParameterName = "@at";
            param6.DbType = DbType.String;
            param6.Value = at;
            maCommande2.Parameters.Add(param6);
    Maintenant je n'ai plus le message d'erreur concernant le datareader non fermé de maCommande mais je l'ai pour maCommande2...

    De plus qd je met en commentaire le If et je met un cas qui ne renvoie pas vide, le fichier Xml est vide.

    Je n'ai jamais utiliser de arrayList :'( je suis perdu

  11. #11
    Membre du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    Il n'y a pas de paramètres pour maCommande2 vu qu'elle fait appel à la requête QueryProcess2 qui ne fait pas appel elle-même à des paramètres.

    Essaye de compiler après avoir supprimé ces lignes.

    En fait les ArrayList sont comme des vector en c++, ce sont des tableaux qui sont gérés de manières dynamiques (s'agrandissent en fonction du besoin par exemple) et ce que je fais ici, c'est créér un SqlDataReader qui va lire le résultat de ta requête et à chaque ligne trouvé, il l'insere dans l'ArrayList, et tu peux insérer un ArrayList dans une ListBox sur InfoPath.
    J'avais essayé avec les DataSet mais j'avais eu des problèmes de compatibilité avec InfoPath.

    EDIT : n'oublie pas d'inclure System.Collections aussi ^^ (on sait jamais)

  12. #12
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'ai supprimé les lignes, mis en commentaire les ligne du "if" pour tester uniquement le tableau dans les cas ou il ne renvoit pas vide et j'obtiens ca
    qd je le test par visual studio.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="utf-8" ?> 
      <ArrayOfAnyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/" />
    Aucune donnée n'apparait dans le Xml

  13. #13
    Membre du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    Teste juste la requête avec les paramètres comme ceci, pour voir si c'est pas une erreur de passage de paramètres

    sinon j'ai trouvé une autre erreur, ca doit être ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    param2.Value = CodeProduit;
    alors que ca doit être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    param2.Value = codeproduit;


  14. #14
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Oui j'avais deja corrigé.

    Je ne vois pas ce que tu veux dire ?

    la j'execute la webmethod uniquement avec maCommande.

    Je vais tester avec maCommande2 voir ce que ca donne.

  15. #15
    Membre du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    Oki, j'ai testé chez moi, le problème semble venir du like.

    Il doit y avoir un conflit avec ' , @ et %

    Je ne sais pas trop mais j'ai simplement remplacer mes clauses
    WHERE X = @monparametre par WHERE X LIKE '%@monparametre%'
    et ca ne fonctionne plus.
    Le souci est le suivant : on doit passer un paramètre nommé @CodeProduit donc la valeur que contient ce paramètre. Or on passe '@CodeProduit', il doit donc prendre le string @CodeProduit comme paramètre, c'est la ou est donc l'erreur.

    Essaye plutot ca :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    [WebMethod]
        public ArrayList GetProcess(string nfacture, string codeproduit, string at)
        {
            SqlConnection cn = new SqlConnection("server=serveurdev;uid=***;pwd=***;Trusted_Connection=Yes;database=***");
     
            string QueryProcess = "SELECT action,destinataire,suivi FROM conditions WHERE marque IN (" +
     
                "SELECT marque FROM produits WHERE codeproduit = @CodeProduit )" +
     
                "AND [gm] IN (" +
     
                "SELECT [gm] FROM [Boulanger].[dbo].[produits] WHERE [codeproduit] = @CodeProduit )" +
     
                "AND [at] = @at " +
     
                "AND (DATEDIFF(day, (" +
     
                "SELECT [date_achat] FROM [Boulanger].[dbo].[factures] WHERE [nfacture] = @nfacture), GETDATE()) >= [jmin]) " +
     
                "AND (DATEDIFF(day, (" +
     
                "SELECT [date_achat] FROM [Boulanger].[dbo].[factures] WHERE [nfacture] = @nfacture), GETDATE()) <= [jmax])";
     
            string QueryProcess2 = "SELECT Action FROM conditions WHERE marque = 'AUTRE'";
     
            cn.Open();
            SqlCommand maCommande = cn.CreateCommand();
            maCommande.CommandType = CommandType.Text;
            maCommande.CommandText = QueryProcess;
            SqlCommand maCommande2 = cn.CreateCommand();
            maCommande2.CommandType = CommandType.Text;
            maCommande2.CommandText = QueryProcess2;
     
     
            maCommande.Parameters.AddWithValue ("@nfacture", "%" + nfacture + "%");
            maCommande.Parameters.AddWithValue ("@CodeProduit", "%" + codeproduit + "%");
            maCommande.Parameters.AddWithValue ("@at", "%" + at + "%");
     
     
            SqlDataReader monCurseur = maCommande.ExecuteReader();
            ArrayList TabResult = new ArrayList();
            while (monCurseur.Read())
            {
                TabResult.Add(monCurseur.GetValue(0) + "*" + monCurseur.GetValue(1) + "*" + monCurseur.GetValue(2));
            }
     
            if (TabResult.Count == 0)
            {
                SqlDataReader monCurseur2 = maCommande2.ExecuteReader();
                ArrayList TabNoResult = new ArrayList();
                while (monCurseur2.Read())
                {
                    TabNoResult.Add(monCurseur2.GetValue(0));
                }
                cn.Close();
                return TabNoResult;
            }
            cn.Close();
            return TabResult;
        }

    J'ai changé la manière de passer les paramètres

  16. #16
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci en retard pour ton aide precieuse
    J'ai finalement utilisé des Procedures stockés SQL ca change la vie
    Mais merci en tout cas pour les explications concernant les arraylists.

    Je vais très certainement les utilises.

    Encore un GRAND merci à toi pour ton implication.

  17. #17
    Membre du Club Avatar de cocosql
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Points : 59
    Points
    59
    Par défaut
    de rien, content d'avoir pu t'aider

    J'ai aussi utilisé les procédures stockées pour d'autres webservice (plutôt d'INSERT), et c'est vrai que c'est plus simple (ptet pas en terme de programmation langage SQL SERVER mais en terme de sécurité c'est un bon point)

Discussions similaires

  1. [RegEx] Fonction preg_match renvoie vide avec : (bla)?
    Par [ZiP] dans le forum Langage
    Réponses: 2
    Dernier message: 13/09/2014, 21h16
  2. [WebService][CFC/WSDL] Retour d'appel vide
    Par lzw1015bean dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 06/12/2006, 11h16
  3. [MySQL] SELECT vide : que renvoie sql ?
    Par Istrella dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/10/2006, 02h47
  4. La commande sed renvoie un fichier vide
    Par aaronw dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/09/2006, 11h46
  5. Recordset vide alors que la requete renvoie des valeurs
    Par lepiou dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 07/06/2006, 10h36

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