文档首页
MySQL Connector/NET 开发者指南
相关文档 下载本手册
PDF (US Ltr) - 1.3Mb
PDF (A4) - 1.3Mb


5.12.2.2 构建自定义侦听器

要构建可与 MySQL Connector/NET 追踪源一起使用的自定义侦听器,需要了解所使用的关键方法和事件数据格式。

传递追踪消息所涉及的主要方法是 TraceSource.TraceEvent 方法。其原型如下:

public void TraceEvent(
    TraceEventType eventType,
    int id,
    string format,
    params Object[] args
)

此追踪源方法将处理附加的侦听器列表,并调用侦听器的 TraceListener.TraceEvent 方法。TraceListener.TraceEvent 方法的原型如下:

public virtual void TraceEvent(
    TraceEventCache eventCache,
    string source,
    TraceEventType eventType,
    int id,
    string format,
    params Object[] args
)

前三个参数按标准使用,由 Microsoft 定义。最后三个参数包含特定于 MySQL 的追踪信息。下面将更详细地讨论每个参数。

int id

这是特定于 MySQL 的标识符。它标识已发生的 MySQL 事件类型,从而生成追踪消息。此值由 Connector/NET 代码中包含的 MySqlTraceEventType 公共枚举定义

public enum MySqlTraceEventType : int
{
    ConnectionOpened = 1,
    ConnectionClosed,
    QueryOpened,
    ResultOpened,
    ResultClosed,
    QueryClosed,
    StatementPrepared,
    StatementExecuted,
    StatementClosed,
    NonQuery,
    UsageAdvisorWarning,
    Warning,
    Error
}

MySQL 事件类型还决定了使用参数 params Object[] args 传递的内容。args 参数的性质将在以下材料中进一步详细描述。

string format

这是包含零个或多个格式项的格式字符串,这些格式项对应于 args 数组中的对象。这将由诸如 ConsoleTraceListener 之类的侦听器使用,以将消息写入输出设备。

params Object[] args

这是一个对象列表,具体取决于 MySQL 事件类型,id。但是,使用此列表传递的第一个参数始终是驱动程序 ID。驱动程序 ID 是一个唯一编号,每次打开连接器时都会递增。这使得能够识别同一连接上的查询组。驱动程序 ID 之后的参数取决于 MySQL 事件 ID,如下所示:

特定于 MySQL 的事件类型 参数 (params Object[] args)
ConnectionOpened 连接字符串
ConnectionClosed 无附加参数
QueryOpened mysql 服务器线程 ID,查询文本
ResultOpened 字段计数,受影响的行数(如果选择则为 -1),插入的 ID(如果选择则为 -1)
ResultClosed 读取的总行数,跳过的行数,结果集的大小(以字节为单位)
QueryClosed 无附加参数
StatementPrepared 准备好的 sql,语句 ID
StatementExecuted 语句 ID,mysql 服务器线程 ID
StatementClosed 语句 ID
NonQuery 变化
UsageAdvisorWarning 使用情况顾问标志。NoIndex = 1,BadIndex = 2,SkippedRows = 3,SkippedColumns = 4,FieldConversion = 5。
警告 级别,代码,消息
错误 错误号,错误消息

这些信息允许您创建自定义追踪侦听器,以主动监视特定于 MySQL 的事件。