2016-06-10 2 views
1

MySQL 데이터베이스에 연결할 때 오류 처리를 시도합니다. 연결 오류와 SQL 오류를 구분하고 싶습니다. 문제는 반환되는 오류가 MySQL 오류가 아닌 사실 MS 오류 인 것입니다. 이것은 내가 뭐하는 거지입니다 :WPF MySQL 연결 오류 처리

MySql.Data.MySqlClient :

using (MySqlConnection con = new MySqlConnection(ConString)) 
{ 
    MySqlDataAdapter da = new MySqlDataAdapter(); 
    MySqlCommand cmd = new MySqlCommand(sqlCMD, con); 
    try 
    { 
     System.Security.Cryptography.RSACryptoServiceProvider.UseMachineKeyStore = true; 
     var provider = new System.Security.Cryptography.RSACryptoServiceProvider(); 
     con.Open(); 
     da.SelectCommand = cmd; 
     da.Fill(dt); 
     con.Close(); 
    } 
    catch (Exception x) 
    { 
     //Amazing error catching code 
    } 
} 

가 지금은 MySQL이 설치되지 않은 컴퓨터에 연결을 시도라고 할 수 있습니다,이 반환되는 것을 제외하고는 .MySqlException (0x80004005) : 지정된 MySQL 호스트에 연결할 수 없습니다. MySql.Data.MySqlClient.Driver.Create에서 MySql.Data.MySqlClient.Driver.Open() 에서 MySql.Data.MySqlClient.NativeDriver.Open() (MySqlConnectionStringBuilder 설정) 에서 MySql.Data.MySqlClient.MySqlPool에서 MySql.Data.MySqlClient.MySqlConnection.Open에서 MySql.Data.MySqlClient.MySqlPool.GetConnection() 에서 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver() 에서 .GetPooledConnection() ()

지금 인터넷 검색 "0x80004005 MySQL은"스택 오버플로에 C#을 MySQL에 연결에 대한 여러 스레드를 반환합니다. 그냥 검색을 수행 0x80004005 returns a Windows XP error message page.

그래서 내가 가장 좋은 방법은 연결 오류를 결정하는 가장 좋은 방법은 SQL 오류 메시지 대 질문?

+1

이 예를 살펴 보자. (정확한 예외 유형이 아님) try {} catch (MySqlConnectionException) {} catch (MySqlQueryException). 1 가지 이상의 예외 유형, 특히 일반적인 예외를 포착하고 처리 할 수 ​​있습니다. 이 외에도 일반 예외를 조사하고 기본 예외 유형을 판별해야합니다. 이 예제를 https : //dev.mysql과 함께 살펴보십시오.co.kr/doc/connector-net/ko/connector-net-programming-connecting-errors.html – Bearcat9425

+0

@ Bearcat9425 너무 답장 해 주신 분은 실제 답변이 아니라 댓글로 답변하셨습니다. 나는 너에게 신용을 줬을거야. 내가 할 수있는 전부는 의견에 투표하는 것입니다. 다음에 내가 대답 할 것이면 답을 줄 것입니다. – Xaphann

+1

이 질문에 관해 다른 사람을 언급 할 때 내 의견을 답으로 게시했습니다. 나는 당신이 이미 대답을 표시했음을 알고 있지만 대답의 나의 버전을 넣을 것이라고 생각했습니다. – Bearcat9425

답변

1

왜 MySQL 커넥터가 슬로우 할 수있는 다른 Exception 형에 캐치를 실시하지 말아주세요. (정확한 예외 유형이 아님)

try 
{ 
}catch(MySqlConnectionException) 
{ 
}catch(MySqlQueryException) 
{ 
} 

예외 유형, 특히 일반적인 예외를 잡아서 처리 할 수 ​​있습니다. 이 외에도 일반 예외를 조사하고 기본 예외 유형을 판별해야합니다. MySQL의 커넥터가 슬로우 수있는 다양한 예외 유형에 어획량을 수행하지 왜뿐만 아니라

https://dev.mysql.com/doc/connector-net/en/connector-net-programming-connecting-errors.html

1

저는 MySQL 예외를 인식하지 못합니다. 그러나 더 많은 catch 블록을 사용해야합니다.

각 메소드의 정의로 이동하면 각 메소드에서 예외가 발생할 수있는 것을 볼 수 있습니다. 다음을 대신 사용

catch (Exception x) 
    { 
     //Amazing error catching code 
    } 

여러 차례 catch 블록을 사용하십시오. 두 개가 많은 경우 예외를 그룹화하는 방법은이 게시물을 참조하십시오.

Catch multiple exceptions at once?

1

다만이 같은 간단한 아이디어를 고려하고 필요하지 않은 경우, 단지 ignore..There이 달리 공식적인 방법이 될 수 있습니다 ..

catch (MySqlException ex) 
{ 
    if (ex.Message.Contains("connection")) 
    { 
     // do stuff when connection trouble 
    } 
    else 
    { 
     // do stuff when MySql trouble 
    } 
} 

희망이 도움이 ..