若要建置可搭配 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 特有事件的自訂追蹤監聽器。