若要建置可搭配 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。 |
| Warning | 層級、程式碼、訊息 |
| Error | 錯誤號碼、錯誤訊息 |
這項資訊可讓您建立可以主動監視 MySQL 特有事件的自訂追蹤監聽器。