2014-09-05 133 views
0

我有mysql連接到遠程服務器connector.net 6.7.4MYSQL connector.net連接丟失

這樣的:

public MySqlConnection conn; 
public MySqlCommand com; 

public onStart() 
{ 
    conn = new MySqlConnection("Server=xx.xx.xx.xx;Port=3306;Database=kbindb;Uid=collector; Pwd=xxx;"); 
    conn.Open(); 
    com = new MySqlCommand("SELECT * FROM blabla;", conn); 
    timer.Interval=1000; 
    timer.Enabled=True; 

} 

public onTimerTick(bla bla) 
{ 
    // timer.Enabled=False; 
    MySqlDataReader dr = com.ExecuteReader(); 
    while(dr.Read()){ 
      //blabla 
     } 
    dr.Close(); 
    //timer.Enabled=True; 
} 

代碼被成功地但1-2小時後運行鎖定計時器:com.ExecuteReader(); 它不能用try catch處理。

我該怎麼辦?

+3

不要讓連接長時間打開。在定時器內創建連接,獲取需要的數據並處理它。 – 2014-09-05 17:43:13

回答

1

我不會保持連接到數據庫打開任何時間比你需要它..當然不是幾個小時。我假設你會得到某種暫停。

嘗試在tick事件中創建連接,獲取數據並處理連接。 (以下代碼中的using聲明將負責處理您的資源。)

public onStart() 
{ 
    timer.Interval = 1000; 

    timer.Enabled = true; 
} 

public onTimerTick(...) 
{ 
    timer.Enabled = false; 

    using (var conn = new MySqlConnection("Server=xx.xx.xx.xx;Port=3306;Database=kbindb;Uid=collector; Pwd=xxx;")) 
    { 
     conn.Open(); 
     using (var com = new MySqlCommand("SELECT * FROM blabla;", conn)) 
     { 
      var reader = com.ExecuteReader(); 

      while (dr.Read()) 
      { 
       //blabla 
      } 
     } 
    } 

    timer.Enabled = true; 
} 
+0

感謝您的建議。我成功地爲本地數據庫提供了這個東西。我不知道遠程數據庫有錯誤。 – JeWoPeR 2014-09-05 18:05:27

+0

我會試試這個。並測試性能。 – JeWoPeR 2014-09-05 18:06:29