2012-08-13 9 views
0
c = new TableCell(); 
decimal pembayaran = Db.SingleDecimal("Select (valuta) from ArInvoice where customerID='01'); 
c.Text = Cf.Num(pembayaran); 
c.Attributes["style"] = "text-align: right;"; 
tr.Cells.Add(c); 

쿼리 값을 가질 때 작동하지만 결과는 내가이 문제를 해결하는 방법Db.SingleDecimal에서 Null 예외를 처리하는 방법?

"다른 종류의 DBNull이에서 개체 캐스트 할 수없는"널 때이 오류가?

+1

'SingleDecimal' 메서드가있는 도구/라이브러리는 무엇입니까? 그게 당신 자신 이니? 또는...? '변화가 거기에서 만들어 질 필요가 있기 때문에. –

답변

0

문제는 다음 메서드 호출 함께 :

Db.SingleDecimal("Select (valuta) from ArInvoice where customerID='01'); 

는 방법 정의는 질문에 제공되지 정확히 때문에 않지만, 나는 그것이 다른에 DBNull 값을 변환하려고 추측하고있는 무슨 확실하지 유형. 당신은 더 나은 도움이 방법의 정확한 정의를 보여줄 필요가 있지만, 일반적으로 같은으로 DBNull을 처리 할 것 : 나는 SingleDecimal 방법으로 어떤 도구를 직접 익숙하지 않다

var myDecimal = dr.IsDBNull(0) ? 0M : dr.GetDecimal(0); // get a decimal from the first column 
0

, 그래서 '

(직접 또는 간접적으로) ADO.NET에서 데이터를 쿼리 할 때 어떤 종류의 "독자"API (대부분 IDataReader 일 가능성이 높습니다.) 또는 당신은 raw object 값을 얻을 것입니다.

첫 번째 경우에는 IsDBNull 방법 (열당)에 액세스해야합니다. 그래서 그 메소드를 호출하고, 당신이 null을 가지고 무엇을 하든지 할 수 있습니다.

두 번째 경우 DBNull의 값 (예 : if(val is DBNull)을 확인해야합니다.

두 경우 모두 다음 코드는 라이브러리에 달려 있습니다. 두 경우 모두 두 개의 null-esque 시나리오를 고려해야합니다. 행이없고 값이 하나 인 행입니다.

솔직히, 두 경우 모두 기존의 라이브러리/도구를 사용하는 것이 더 쉬울 것입니다. 예를 들어, 날씬한와 함께, 이것은 단지가 될 것입니다 : 당신에게 제공

string customerId = "01"; 
decimal? pembayaran = Db.Query<decimal?>(
    "Select valuta from ArInvoice where [email protected]", 
    new { customerId }).Single(); 

:

  • 올바른 파라미터 설정을
  • 모든 데이터를 조회하는
  • 같은 API를 처리 널 (Query<T>)
  • 당신이 원하는 LINQ (Single(), First(), ToList() 등)를 사용할 수있는 능력
  • 당신이 대신 (디폴트 값을 사용하고자하는 경우

decimal? 셀의 값이 null 때, 당신은 사용할 수 있습니다 여기

decimal pembayaran = Db.Query<decimal?>(
    "Select valuta from ArInvoice where [email protected]", 
    new { customerId }).Single() ?? 0M; 

?? 0M는 단지 널 병합 작업입니다주의 null 대신에 decimal을 0으로하십시오.

0

나는 내 자신의 질문에서 답을 찾았습니다.나는 select isnull ((valuta), 0)을 SQL에 사용하므로 결과가 DbNull 일 때 0으로 대체됩니다.

decimal pembayaran = Db.SingleDecimal("Select isnull((valuta),0) from ArInvoice where customerID='01'); 

그러나 결과는 DBNULL 때 어떤 조치를 취할 것인지 (기본 값을 설정뿐만) 아마 u는 시도 할 수 에렌 Ersönmez 나 마크 Gravell의 대답. 해피 코딩 : D