要构建可与 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 的事件。