代码之家  ›  专栏  ›  技术社区  ›  RRUZ

如何监视通过ADO连接发送的SQL命令?

  •  2
  • RRUZ  · 技术社区  · 16 年前

    TSQLmonitor 对于dbExpress,但对于ADO。

    有人知道实现此功能的第三方组件吗?

    更新

    我想做的是从我的应用程序中以编程方式(通过代码)监视SQL语句,而不使用外部工具。对于任何数据库引擎。

    4 回复  |  直到 16 年前
        1
  •  9
  •   RRUZ    16 年前

    我找到了一个解决方案,使用事件 TAdoConnection.OnWillExecute (在数据库服务器发出接受命令执行的信号后发生。)

    更多信息 here

    procedure TDataModuleProd.ADOConnection1WillExecute(
      Connection: TADOConnection; var CommandText: WideString;
      var CursorType: TCursorType; var LockType: TADOLockType;
      var CommandType: TCommandType; var ExecuteOptions: TExecuteOptions;
      var EventStatus: TEventStatus; const Command: _Command;
      const Recordset: _Recordset);
    begin
       AddLog(CommandText);
    end;
    

    http://theroadtodelphi.wordpress.com/2010/02/21/build-your-own-profiler-using-ado/

        2
  •  6
  •   glob    16 年前

    如果您的数据库是MS-SQL,则可以使用 this one

        3
  •  0
  •   skamradt    16 年前

    因为您需要任何数据库引擎,所以我认为唯一可靠的方法是在执行应用程序之前对应用程序进行指令,以记录SQL。有几种方法可以做到这一点,从从从现有的TAdoxxxx对象创建子对象,到创建简单的函数,每次需要检查时都必须记住调用这些函数。至于日志记录,首选方法之一是使用outputdebugstring将其发送到调试控制台。当delphi运行时,这将显示在消息窗口中。有一个独立的可执行文件 DebugView

    如果您只是想在调试时访问SQL(这样您就可以在应用程序外部进行测试和调优),并使用tAdoQuery组件,则可以使用调试计算器将其保存到文件中。只需在打开之前设置一个断点,然后在断点处运行调试计算器并输入查询组件的名称,后跟: .sql.savetofile('c:\sqlfilename.sql') 然后按return,它会将现有SQL的全部内容保存到指定的文件中。如果正在生成SQL或SQL太大,无法使用调试检查器查看,则这可能是一个救命稻草。

        4
  •  0
  •   Naveen    16 年前

    我已经发布了如何使用Windbg作为 SQL profiler

    可以很容易地将其更改为用于任何数据库。通过这个,我试图演示如何从堆栈的底部跟踪某些内容。