文件首頁
MySQL Connector/NET 開發人員指南
相關文件 下載本手冊
PDF (美式信紙) - 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。
Warning 層級、程式碼、訊息
Error 錯誤號碼、錯誤訊息

這項資訊可讓您建立可以主動監視 MySQL 特有事件的自訂追蹤監聽器。