none
requete sql sur ficheir xml RRS feed

  • Question

  • bonjour à tous

    je travaille en c# avec visual studio 2008.
    je dois parcourir une boite mail, et ne recuperer que les mails provenant d'un site contenu particulier.
    Comme je peux avoir plusieurs sites, j'ai créé une table que je parcoure avant la requête sql.
    Mon idée est de recupere tous les sites, en faire une chaine séparée par des ' et des virgules , pouvant être utilisée dans une clause IN de la requête SQL
    voici mon code (simplifié pour la question):
    précicion : j'utilise Linq pour la lecture dans cette table (PROSPECT_SITEPROV)
    var strInboxURI = "url de ma boite mail";
    DataLinqDataContext ledatac = new DataLinqDataContext(); var query = ledatac.PROSPECT_SITEPROV;// requête ultra simple: toute la table var laliste = "";
    // je passe chaque tuple dans une variable pour l'utiliser ensuite dans la clause 'IN' de ma requete sql
    foreach (var item in query) { laliste = laliste + "'"+ item.nom_pro_site + "',"; } // élimination dernière virgule pour variable dans la requete ci dessous var lg = laliste.Length; laliste = laliste.Substring(0, lg-1);
    // la requete :
    strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >" + "<D:sql>SELECT * FROM \"" + strInboxURI + "\"" + " WHERE \"DAV:ishidden\" = false AND \"DAV:isfolder\" = false " + " AND \"urn:schemas:httpmail:read\" = false " // + " AND \"urn:schemas:httpmail:textdescription\" IN (" + laliste + ")" + " AND \"urn:schemas:httpmail:textdescription\" IN ('monsite1',monsite2)" + "</D:sql></D:searchrequest>";
    mon souci c'est que la clause IN ne passe pas. Que je la mette en dur dans la requête (ligne en commentaire ci-dessus) ou que je la passe en varaible (laliste), des que j'execute j'ai ce message d'erreur :
    "le serveur distant a  retourné une erreur:(400). demande incorrecte"

    Est ce que qq aurait une idée pour m'aider à solutionner ce pb ?
    merci d'avacne
    Cordialement
    AL

    mardi 28 juillet 2009 07:52