要构建使用 MySQL Connector/NET Trace Source 的自定义侦听器,有必要了解使用的关键方法和使用的事件数据格式。
传递跟踪消息所涉及的主要方法是
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 事件类型,从而生成跟踪消息。该值由
MySqlTraceEventType
连接器/NET 代码中包含的公共枚举定义:
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 是唯一的编号,每次打开连接器时都会递增。这可以识别同一连接上的查询组。driver id 后面的参数取决于MySQL event id,如下:
MySQL 特定的事件类型 | 参数(params Object[] args) |
---|---|
连接打开 | 连接字符串 |
连接已关闭 | 无附加参数 |
查询打开 | mysql服务器线程id,查询文本 |
结果打开 | 字段计数、受影响的行(如果选择 -1)、插入的 ID(如果选择 -1) |
结果关闭 | 读取的总行数、跳过的行数、结果集的大小(以字节为单位) |
查询关闭 | 无附加参数 |
StatementPrepared | 准备好的sql,语句id |
语句执行 | statement id,mysql服务器线程id |
报表关闭 | 声明编号 |
非查询 | 变化 |
使用顾问警告 | 使用顾问标志。NoIndex = 1,BadIndex = 2,SkippedRows = 3,SkippedColumns = 4,FieldConversion = 5。 |
警告 | 级别、代码、消息 |
错误 | 错误编号,错误信息 |
此信息将允许您创建可以主动监视 MySQL 特定事件的自定义跟踪侦听器。