2012-04-24 6 views
3
using (SqlConnection con = new SqlConnection()) 
{ 
    try 
    { 
      con.Open(); 
    } 
    catch (Exception ex) 
    { 
      MessageBox.Show(ex.Message); 
    } 
} 

잘 작동합니다. 하지만 난 try catch 같은 것을 사용하지 않고 예외를 처리 할 수 ​​있는지 알고 싶습니다 if else? 또는 사용할 mendetory입니까 try catchtry catch를 사용하지 않고 예외를 처리하는 방법은 무엇입니까?

+0

@Henk Holterman :이 질문은 정말로 나쁘다. 투표 하시겠습니까? 대안을 찾고있는 것이 나쁜가요? – jams

+1

@Henk. 나는 동의한다 ... 스택 오버 플로우에 대해 이론, 전략 또는 성능 질문을 할 수있는 사람에게는 전반적인 문제가있다. 나는 지금 그들이 더 잘 받아 들여지는 곳에서 프로그래머에게 질문하는 경향이있다. – KingOfHypocrites

+0

나는이 투표에서 투표가 완전히 공정하다고 생각하지 않는다. 그것은 물어야하는 완전히 합법적 인 질문입니다. –

답변

5

try catch 이외의 예외를 처리 할 다른 메커니즘은 없습니다.

if(connection.DidAnErrorOccur) 

과 같이 원하는 것 같습니다. 존재하지 않습니다.

3

유일한 방법은 오류를 반환하는 모든 조건을 확인하는 것입니다. 어쨌든이 일을해야합니다. 시도/캐치가 비쌉니다. 캐치를 최후의 수단으로 삼아야하며 그 목적을 위해 주위를 돌볼 방법이 없습니다.

+2

실시간 시스템을 개발하지 않는 한 (이 경우에도 논의 할 수 있습니다.) 아니오, Try/Catch는 전혀 비싸지 않습니다. 벤치 마크를 실행하면 직접 볼 수 있습니다. – GETah

+1

try/catch를 사용하면 컴파일러 최적화에 영향을 줄 수 있으며 프로그래머는 try/catch를 사용하여 null을 확인하는 것과 같은 간단한 작업을 수행합니다. 그것은 단지 나쁜 습관 일뿐입니다. 예외를 포착하는 것은 간단한 확인보다 항상 느립니다. 나는 그들을 사용하는 것을 말하는 것이 아니라 방어 프로그래밍 대신에 사용하지 말라는 의미입니다. – KingOfHypocrites

+0

맞아, 좋은 지적이야! +1, 당신은 그것을받을 자격이. – GETah

1

Tejs의 답변이 정확합니다. 오류를 처리 할 다른 메커니즘이 없다고 생각합니다.

그러나보다 구체적인 오류는 처리 할 수 ​​있습니다. try catch 외부의 변수를 선언하여 성공했는지 확인할 수도 있습니다.

예 : 나는 당신을 줄 수

using (SqlConnection con = new SqlConnection()) 
{ 
    bool sqlErrorOccurred; 

    try 
    { 
     con.Open(); 
     sqlErrorOccurred = false; 
    } 
    catch (SqlException ex) 
    { 
      sqlErrorOccurred = true; 
    } 

    if(sqlErrorOccurred) 
    { 
     MessageBox.Show("A Sql Exception Occurred"); 
    } 
} 
+0

이것은 try/catch를 어떻게 제거합니까? – GETah

+0

메시지 상자가 catch 문에서 올바르게 수행 될 수 있습니다. 똑같은 일을하는 코드가 더 많습니다. – KingOfHypocrites

+0

나는 단순히 개념을 설명하고 있습니다. 이것은 당신이 사용할 코드가 아닙니다. KingOfHypocrites가 말했듯이, catch 문에 messagebox를 넣을 수 있습니다. 그러나 catch 문에 넣을 수없는 훨씬 복잡한 것들이 있습니다. – Scen

2

가장 좋은 대안은 ELMAH이다. http://code.google.com/p/elmah/ 잡히지 않은 모든 오류를 처리하고 기록합니다. 거기에서 나는 오류를 고치거나 예상되는 특정 오류를 잡아 내고 발생할 수있는 오류를 포착하지 말 것을 제안합니다. 예외가 발생했기 때문에 코드를 건너 뛰는 것이 아니라 잠재적 인 문제를 해결할 수 있도록하는 것이 가장 좋습니다.

0

위의 답변은 정확합니다. 그러나 주목할 점은 전역 예외 처리기를 설정할 수 있다는 것입니다. 앞서 말했듯이 이것은 방어 코딩의 필요성을 해결하지 못합니다. 그러나 모든 예외를 처리해야한다는 우려가있는 경우 (예 : 오류를 기록하려면)이 방법이 매우 유용 할 수 있습니다.

0

저는 실시간 스트리밍 데이터를 사용하는 시스템을 구축하고 있으므로 다른 모든 것이 유휴 상태 일 때 발생할 수있는 오류를 처리해야합니다. 사용하고있는 API는 예외가 첨부 된 "오류"라는 메서드를 통해 프로그램에 오류를 다시 전달합니다. 이 방법은 오류를 던질 수 있지만 문제가되는 것은 전체 프로그램을 try-catch 블록에 넣는 것이 좋은 방법인지 모르기 때문입니다.

그래서 주위를 둘러보기 위해 이벤트 처리기를 설정하여 내 프로그램의 주요 부분에서 이벤트를 발생시킨 다음 그 시점에서 발생하는 모든 오류를 처리 할 수 ​​있습니다.

메인 클래스에서 : 예를 들어

private void Error(object sender, EventArgs e) { 

    Exception ex = sender as Exception; 

    Console.WriteLine("Error: " + ex); // Or whatever you want to do with the exception 

    // You could even add this if you want to then use the try -catch sequence (which 
    // makes the exception easier to parse and also enables you to stop the program 
    // with unhandled exceptions if it's something catastrophic: 

    try { 

     throw ex; 
    } catch (put.your.exception.detail.here) { 

     // do stuff 
    } finally { 

     // do other stuff 
    } 
} 

합니다 (API에서 오류를 수신 클래스에서) :

class Foo { 
    public event EventHandler ThrowError; 

    protected virtual void OnError(Object src, EventArgs e) { 

     if (ThrowError != null) { 

      ThrowError(src, e); 
     } 
    } 

    private virtual void error(Exception e) { 

     OnError(e, EventArgs.Empty); 
    } 
} 
2

이 좋아, 당신이 드 구현 할 수 있습니다 Application_Error는 전역에 있습니다.asax,이 방법은 오류에 대한 방어의 첫 번째 라인이며, 예를 들어 default.aspx에 대한 특정 페이지에 대한 모든 응용 프로그램

http://msdn.microsoft.com/en-us/library/24395wz3%28v=vs.100%29.aspx

입니다, 당신의 Page_Error

http://msdn.microsoft.com/en-us/library/ed577840%28v=vs.100%29.aspx

구현 할 수 있습니다

원하는 경우 모든 컨트롤러에서 OnException (ExceptionContext filterContext)을 구현할 수 있도록 mvc에서 작업하는 경우이 문제가 발생합니다. hod는 처리되지 않은 예외가 발생할 때 호출됩니다.

http://devproconnections.com/aspnet-mvc/aspnet-mvc-tutorial-handling-errors-and-exceptions

또는 다른 손 들어

https://www.simple-talk.com/dotnet/asp.net/handling-errors-effectively-in-asp.net-mvc/

어쩌면 당신은 당신이 조건

을 평가할 수있는이 더불어 어설 문을 사용할 수 있습니다 atribute 당신은 당신의 오류를 구현 할 수 있습니다

http://msdn.microsoft.com/en-us/library/ttcc4x86.aspx

관련 문제