2013-03-11 171 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