2013-03-11 110 views
0

MySqlConnection.StateChange如何工作?MySqlConnection.StateChange永遠不會獲取

我有以下代碼。

conn.StateChange += ConnectionStateChanged; 

private void ConnectionStateChanged(Object sender, StateChangeEventArgs e) { 
    switch (e.CurrentState) { 
    // is never equal to Fetching 
    } 
} 

public DataTable Query(string query) { 
    DataTable dt = new DataTable(); 

    using (MySqlDataAdapter a = new MySqlDataAdapter(query, conn)) { 
     try { 
      a.SelectCommand.CommandTimeout = 5; 
      a.Fill(dt); 
     } catch { 
      return null; 
     } 
    } 

    return dt; 
} 

爲什麼ConnectionStateChanged永遠不會用ConnectionState.Fetching和ConnectionState.Executing調用?

回答

1

好吧,我可能誤解msdn,但似乎這些國家不被執行(枚舉值都只是「保留」,即使是在.NET 4.5):

執行連接對象正在執行一個命令。 (此值是 對於產品的未來版本保留。)

擷取的連接對象檢索數據。 (此值爲 保留給該產品的未來版本。)

+0

哦。那麼是否有其他官方方式來獲得連接狀態? – 2013-03-11 13:13:21

+0

@PeterGoldwynn據我所知(但在這一點上知之甚少),你可以打開,關閉(並在4.5中連接)... – 2013-03-11 13:19:27

+0

好吧,因爲打開,關閉和連接都支持我會執行它以一種標準的方式。不幸的是,我還需要知道查詢執行期間的連接狀態。 無論如何,我想出了一個想法,手動啓動傳遞適當參數的StateChange事件。 – 2013-03-11 13:35:56