2014-09-05 4 views
0

이 같은 connector.net 6.7.4MYSQL의 connector.net 연결 오랜만에 손실

원격 서버에 MySQL의 연결이 :

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

해당 기간 동안 연결을 유지하지 마십시오. 타이머 내부에서 연결을 만들고 필요한 데이터를 가져 와서 처리하십시오. –

답변

1

필자는 필자가 필요로하는 것보다 더 오래 데이터베이스에 연결을 유지하지 않을 것이다. 나는 당신이 어떤 종류의 타임 아웃을 받고 있다고 가정합니다.

틱 이벤트 내에서 연결을 만들고 데이터를 가져 와서 연결을 삭제하십시오. (다음 코드의 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

+0

나는 이것을 시험 할 것이다. 테스트 성능. – JeWoPeR