MySql 데이터베이스를 사용하는 aC# 응용 프로그램이 있는데, 일정 기간 (8 시간) 동안 사용하지 않거나 데이터베이스가 호스트 인 서버에 연결이 끊어진 경우, 데이터베이스가 닫히고 데이터베이스 쿼리를 실행할 수 없습니다. 어떻게하면 데이터베이스에 자동으로 다시 연결할 수 있습니다.연결이 끊어진 후 MySql에 자동으로 다시 연결
감사합니다.
MySql 데이터베이스를 사용하는 aC# 응용 프로그램이 있는데, 일정 기간 (8 시간) 동안 사용하지 않거나 데이터베이스가 호스트 인 서버에 연결이 끊어진 경우, 데이터베이스가 닫히고 데이터베이스 쿼리를 실행할 수 없습니다. 어떻게하면 데이터베이스에 자동으로 다시 연결할 수 있습니다.연결이 끊어진 후 MySql에 자동으로 다시 연결
감사합니다.
데이터베이스에 액세스하려는 시도가 실패하면 연결 명령을 다시 실행하십시오.
응용 프로그램에서 쿼리하기 전에 연결이 여전히 활성화되어 있는지 테스트하십시오. 그렇지 않은 경우 다시 연결하십시오. Et voila!
내가 제일 먼저 생각해야 할 것은 연결이 8 시간 연속으로 열리는 이유는 무엇입니까? 나는 대부분의 경우에 당신이 데이터베이스에 연결하여 일을,하고 닫습니다 있다고 생각 것
:
using (var conn = new MySqlConnection(connString))
{
// do what you need here
}
다음은 블록 내에서만 유효 연결을 만듭니다 블록을 사용. 블록이 끝나면 연결에서 Dispose 메서드가 호출되고 연결 개체를 닫고 올바르게 처리합니다. 이렇게하면 응용 프로그램이 필요하지 않을 때 사용 가능한 연결을 사용하지 못하게됩니다.
이 인 경우 연결이 열려 있는지 확인해야하는 상황에서 연결 변수는 ConnectionState 열거 형이 될 State
속성을 갖습니다.
이 같은 것을 사용하여 확인할 수 있습니다
if (conn.State != ConnectionState.Open)
{
conn = new MySqlConnection(connString);
}
희망을.
연결 문자열에 keepalive
및 keepalivetimeout
옵션을 사용할 수 있습니다. 이를 위해서는 MySqlConnectionStringBuilder
을 사용하는 것이 가장 좋습니다.
답변 해 주신 의견을 보내 주셔서 감사합니다. 지속성은 관리되지 않는 코드에 위임되고 C# 코드에서는이 API 만 호출하기 때문에이 요구 사항이 있습니다.
비활성 기간의 기본값으로 28800 초 (8 시간) 인 wait_timeout
MySQL 매개 변수를 변경하여 문제를 해결했습니다.
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
정교하게 작성하십시오. – roosteronacid