2013-02-04 4 views
0

내 프로젝트에도록 SqlConnection을 가지고 난 내 쿼리 결과어떻게 제어 할 수

public IEnumerable<Product> ListPrpductByCategory(int ID) 
{ 

    var dr = db.ExecuteReader(@"SELECT P.ID,P.CategoryID,P.Name,P.SupplierID,p.UnitPrice,p.UnitsInStock,pp.PicturePath 
           FROM Products P 
           LEFT JOIN ProductPhoto PP ON p.ID=PP.ProductID 
           WHERE [email protected]", 
           Values: new object[] { ID }); 
    while (dr.Read()) 
    { 
     yield return new Product() 
     { 
      ID = dr.GetInt32(0), 
      CategoryID = dr.GetInt32(1), 
      SupplierID = dr.GetInt32(3), 
      Name = dr.GetString(2), 
      UnitPrice = dr.GetDecimal(4), 
      UnitInstock = dr.GetInt16(5), 
      PicturePath = dr.GetString(6) 
     }; 
    } 
    dr.Close(); 

    //... 
} 

으로 제어 할 그것은 나를 내가 원하는 오류 던져

if(dr.GetString(6)==null) 
    PicturePath="Noimage.jpg"; 

같은 제어 dr.GetString(6) 내가 어떻게 할 수 있습니까? 나는 보통으로 그 쓰기

if(dr.IsDBNull(6)) 
PicturePath = "Noimage.jpg"; 
else 
PicturePath = dr.GetString(6); 
+0

감사합니다. llya ıt worked :) –

답변

2

시도는 IsDBNull을 시도 null-coalescing operator

PicturePath = GetString(6) ?? "Noimage.jpg", 
+0

?? 어쨌든 dr.GetString을 호출하는 것처럼 작동하지 않습니다. 여섯 번째 필드의 값이 DBNull.Value 일 때 여전히 throw됩니다. 왜 OP가 그것이 위의 코멘트에서 효과가 있다고 말했는지 확실하지 않습니다. 그가 다른 기록을 보지 않는 한 그것은 할 수있는 방법이 없습니다. –

+0

글쎄, 그의 질문에 대한 Burak의 의견을 참조하십시오. 나는 그가 말한 것처럼 단순히 null을 반환 할 수있는'GetString (int)'에 대한 간단한 API를 분석하고 있었다. –

1

사용하는 것도

PicturePath = dr.IsDBNull(6) ? "Noimage.jpg" : dr.GetString(6) 

을, 당신은 using 문에서 데이터 판독기를 포장한다 :

using(var dr = db.ExecuteReader(...)) 
{ 
    while (dr.Read()) 
    { 
     ... 
    } 
} //no need to call Close, as Dispose already closes the reader. 
3

을 :

관련 문제