none
parameter : afficher la vraie requete qui sera exécutée en base RRS feed

  • Question

  • bonjour à tous, voilà j'utilise les objets OdbcParameter pour créer ma requete qui est du genre

    select * from tblivres where datesortie < ? 

    DateTime myDate = DateTime.now;
    avec un new OdbcParameter("dateSortieLivre", myDate)

    ok ça marche bien mais j'aimerai afficher un log de ma requete genre : 

    "vous avez exécuté la requete suivante : 'select * from tblivres where datesortie < 2009-03-13' 
    et pas "vous avez exécuté la requete suivante : 'select * from tblivres where datesortie < ?'

    Et je ne trouve pas de fonction qui me fait ça.

    pour le moment pour mes logs, je remplace les ? un à un par les différents paramètres que j'ai en entrée dans ma méthode mais c'est moche :( car ça ne sera pas forcemment internationalisé dans le bon format de date ou chiffres décimaux comme le fera le framework.
    J'ai essayé de dessassemblé System.Data pour voir ou était constuite la vraie chaine exécutée mais je n'ai pas trouvé. peut être ca n'est fait que côté BDD ?

    merci de votre aide apportée :)

    bonne journée


    Arnaud
    vendredi 13 mars 2009 13:28

Toutes les réponses

  • Bonjour,

    S'il vous plait, pourriez-vous nous indiquer quelles sont les langues utilisées pour votre SQL Server et pour votre OS ?
    Je pense que le problème est à ce niveau.

    Vous devriez regarder ce lien pour ODBC 
    http://msdn.microsoft.com/en-us/library/ms186724.aspx
    ou en français :
    http://msdn.microsoft.com/fr-fr/library/ms186724.aspx

    Vous pouvez regarder aussi les fonctions T-SQL CAST et CONVERT
    http://msdn.microsoft.com/fr-fr/library/ms187928.aspx

    N'hésitez-pas à poster à nouveau pour plus d'aide ou d'explications ( je ne suis pas sûr d'avoir bien compris votre question )

    Bonne journée
    dimanche 22 mars 2009 18:10
  • ce que je veux dire c'est que plutot que d'utiliser des requetes texte sql en .Net on doit utiliser des sqlparameters ou autres odbcparameters etc. ok c'est bien joli mais comment ej fais pour loguer la vraie requete en texte clair dans mon application ?
    Je voudrais connaitre la vraie requete qui est executée sur ma BDD car j'imagine que les sql/odbc parameters sont bien traduits à un moment ou à un autre non ?

    est-ce plus clair ?

    merci d'avance de votre aide

    bonne journée

    Arnaud
    lundi 23 mars 2009 16:04
  • Bonjour,

    J'ai besoin de connaitre votre version ( 2000/2005/2008 ) pour votre SQL Server

    Il y a peut-être une solution avec 
    http://msdn.microsoft.com/fr-fr/library/ms181929.aspx
    mais cette solution ne marche que pour SQL Server 2005/2008
    ( et elle n'est pas très évidente à mettre en place , je l'ai utilisée 2 fois et j'ai galéré,galéré...)

    Je recherche d'autres renseignements et une autre solution utilisant SqlCapture qui permettrait de récupérer plus simplment la commande générée.

    Désolé, cela risque d'être un peu long ( surtout que cela fait 3 ans que je n'utilise plus ODBC )

    Bonne journée
    lundi 23 mars 2009 16:45
  • Rebonjour,

    Solution peu évidente pour un débutant en SMO ( SQL Server Management Objects ) mais efficace
     http://msdn.microsoft.com/fr-fr/library/ms162182.aspx
    ( pour une fois que la documentation SMO n'est pas uniquement en anglais, j'en profite )
    Attention, je l'ai déjà utilisée mais seulement avec des SqlConnections non des ODBCConnection )

    Je sais que ce n'est pas bien pour les forums français mais , si vous connaissez l'anglais, vous pouvez poser la question sur les forums us notamment
    le forum SQL Server Data Access
    http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/threads/
    ( avantage : il traite ODBC )
    le forum SMO/DMO ( je ne suis pas sûr que vous obtiendrez une réponse )
    http://social.msdn.microsoft.com/Forums/en-US/sqlsmoanddmo/threads/
    le forum Transact-SQL :
    http://social.msdn.microsoft.com/Forums/en-US/transactsql/threads/
    les modérateurs de ce dernier forum vous trouveront très vite comment utiliser la bonne sys.dm_ pour capturer la dernière commande exécutée dans votre connexion ( en général, ils sont très compréhensifs avec les personnes ayant des difficultés avec l'anglais, comme Aaron Alton, Jonathan Kehahyas ou Arnie Rowland en autre )

    Je continue de chercher

    Bonne journée



    PS : j'ai créé un thread pour vous sur le forum us SQL Data Access
    http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/15f46d6f-d166-4492-be8d-fcb748879905
    vous pouvez continuer sur ce forum us ( si vous le voulez ) j'ai indiqué que vous êtes Arnaud L.

    lundi 23 mars 2009 17:17
  • bonjour papy normand merci de toute cette aide et désolé du temps que j'ai mis pour répondre.

    En fait je suis sous Sybase et non sql server. De plus je m'attendais à une solution plus simple côté client comme quelque chose du genre : 

    -----
    OdbcCommand cmd = new OdbcCommand(procName);
    .............
    cmd.Tostring() ou cmd.DisplayRequest()
    -----

    Si j'ai bien compris la conversion des données dans la bonne localisation (dates et nombre a virgules par exemple) se fait exclusivement côté serveur ?
    Donc pour avoir mes logs il faut interroger le serveur ? rien ne peut être fait côté client ?
    Je pensais que lorsque l'on crée une connection les informations de localisation du serveur étaient récupérées côté client et que les logs pouvaient être générés côté client.

    Bonne journée !

    Arnaud

    Arnaud
    mardi 21 avril 2009 14:46
  • J'ai peur qu'il n'y ait pas de solution à ta question: le principe même d'une requête paramétrée, c'est que ce soit le SGBD qui interprête la requête avec paramètres. Cela lui permet de déterminer le chemin d'exécution optimal quel que soit les paramètres utilisés. Il n'y a donc pas "d'interprétation" coté client et aucune raison de le faire. Donc, à part une "bidouille" comparable à celle que tu as fait toi-même, je vois mal pourquoi il y aurait ce genre de fonctionnalité.
    Xavier
    jeudi 23 avril 2009 12:31