2011-04-05 5 views
2

그래서이 프로젝트를 인수했고 한 페이지에서 많은 오류가 발생했습니다. 나는 모든 것을 리팩토링 할 필요가 있지만 항상 시간이 문제가됩니다.datareader가 null인지 또는 행이 없는지 확인하십시오. ASP.NET

코드 검사는 데이터 검색기에 행이 있는지 여부와 오류 페이지로 이동하지 않는지 여부를 확인합니다. 코드가 지금 그러나 같은 DataReader를 널 (NULL)이 될 수 있습니다 (성공적으로 DB에 연결되지 않은) 그것은 분명 나에게 'NullReferenceException이 코드에 의해 처리되지 않은했다'제공 becasuse 이러한 경우에 나는

if (!dr.HasRows) 
// 

을 사용할 수 없습니다. 나는 시도했다! dr.Read 그러나 같은 물건.

코드의 일부이다

SqlDataReader dr = null; 
try 
{ 
//connect to db etc 
dr = DbHelper.GetReader("sp_GetCustomer", param); 
} 
catch 
{ 
//show an error message 
} 

// and then: 
if (!dr.HasRows) 
{ 

} 

어떤 제안이 같은?

미리 감사드립니다.

+0

방법뿐만 아니라뿐만 아니라 시도하고 처리하는 오류가있는 dr.hasrows 퍼팅에 대해? –

+1

@Elad : NO! * 명백한 예외는 피하십시오. 잡아 내지 마십시오. –

+0

@ 단 Puzey - 물론,하지만 물건이 발생합니다. 당신은 결코 알 수 없으며, 특정한 일이 생기면, 나는 그것을 잡으려고하지 않을 것입니다 ... 어떤 종류의 지적 오류를주십시오. –

답변

9

무엇에 대해 :

if (dr == null || !dr.HasRows) { 
    // Do something 
} 
+0

나는 그걸 평가할 것 같아! 어쨌든, 닥터. –

+0

물론, 나는이 난장판을 다루는데 너무 피곤합니다. 감사합니다 – Nick

+1

@Elad : No, C#에서 if 문에 대한 추가 매개 변수는 필요한 경우에만 검사됩니다. 이를 "단락"이라고합니다. 자세한 내용은 [여기] (http://msdn.microsoft.com/en-us/library/6373h346%28v=vs.71%29.aspx)를 참조하십시오. – FreeAsInBeer

2

하나의 가능성은 다음과 같습니다

SqlDataReader dr = null; 
try 
{ 
    //connect to db etc 
    dr = DbHelper.GetReader("sp_GetCustomer", param); 
    if (!dr.HasRows) 
    { 

    } 
} 
catch 
{ 
//show an error message 
} 
관련 문제