2009-09-12 8 views
4

MySql 데이터베이스를 사용하는 aC# 응용 프로그램이 있는데, 일정 기간 (8 시간) 동안 사용하지 않거나 데이터베이스가 호스트 인 서버에 연결이 끊어진 경우, 데이터베이스가 닫히고 데이터베이스 쿼리를 실행할 수 없습니다. 어떻게하면 데이터베이스에 자동으로 다시 연결할 수 있습니다.연결이 끊어진 후 MySql에 자동으로 다시 연결

감사합니다.

+1

정교하게 작성하십시오. – roosteronacid

답변

0

데이터베이스에 액세스하려는 시도가 실패하면 연결 명령을 다시 실행하십시오.

1

응용 프로그램에서 쿼리하기 전에 연결이 여전히 활성화되어 있는지 테스트하십시오. 그렇지 않은 경우 다시 연결하십시오. Et voila!

2

내가 제일 먼저 생각해야 할 것은 연결이 8 시간 연속으로 열리는 이유는 무엇입니까? 나는 대부분의 경우에 당신이 데이터베이스에 연결하여 일을,하고 닫습니다 있다고 생각 것

:

using (var conn = new MySqlConnection(connString)) 
{ 
    // do what you need here 
} 

다음은 블록 내에서만 유효 연결을 만듭니다 블록을 사용. 블록이 끝나면 연결에서 Dispose 메서드가 호출되고 연결 개체를 닫고 올바르게 처리합니다. 이렇게하면 응용 프로그램이 필요하지 않을 때 사용 가능한 연결을 사용하지 못하게됩니다.

인 경우 연결이 열려 있는지 확인해야하는 상황에서 연결 변수는 ConnectionState 열거 형이 될 State 속성을 갖습니다.

이 같은 것을 사용하여 확인할 수 있습니다

if (conn.State != ConnectionState.Open) 
{ 
    conn = new MySqlConnection(connString); 
} 

희망을.

0

연결 문자열에 keepalivekeepalivetimeout 옵션을 사용할 수 있습니다. 이를 위해서는 MySqlConnectionStringBuilder을 사용하는 것이 가장 좋습니다.

0

답변 해 주신 의견을 보내 주셔서 감사합니다. 지속성은 관리되지 않는 코드에 위임되고 C# 코드에서는이 API 만 호출하기 때문에이 요구 사항이 있습니다.

비활성 기간의 기본값으로 28800 초 (8 시간) 인 wait_timeout MySQL 매개 변수를 변경하여 문제를 해결했습니다.

0

while (conn.State != ConnectionState.Open) { sleep(1); // sleep 1 second, depends what function u use here if using timer namespace mightt need differnt function. this type of code is good for cloud type dbs like godaddy/1&1/amazon cloud. where connection can be asummed unreliable due too heavy cloud lag. conn = new MySqlConnection(connString); }

대안이 될 수있다 :이

int counter = 0; 
int NUM_RETRIES = 10; 

while (conn.State != ConnectionState.Open && counter < NUM_RETRIES) 
{ 
System.Threading.Thread.Sleep(1000);//sleep(1); // sleep 1 second (if webservice better to sleep for 50-100 ms), depends what function u use here if using timer namespace mightt need differnt function. this type of code is good for cloud type dbs like godaddy/1&1/amazon cloud. where connection can be asummed unreliable due too heavy cloud lag. 
    conn = new MySqlConnection(connString); 
counter++; 
} 

. https://dev.mysql.com/doc/refman/5.7/en/auto-reconnect.html

관련 문제