2014-02-06 3 views
1

SQL 데이터 테이블에서 일부 값을 읽으려면 SqlDataReader를 사용합니다. 값은 십진수이지만 null을 호출합니다. 그것을 어떻게 할당합니까? 나는 이것을 이렇게 시도했지만, myValue가 null 인 경우 "Specified cast is not valid"예외가 발생합니다.SqlDataReader에서 nullable 십진수

decimal? d= (decimal)myRdr["myValue"]; 

가장 적합한 방법은 무엇입니까?

감사합니다.

+0

가능한 중복 [null 값을 찾기 데이터 집합 - DataRow.IsNull 메서드 대 vs == DbNull.Value - C#] (http://stackoverflow.com/questions/5599390/finding-null-value-in-dataset-datarow-isnull-method-vs-dbnull-value -c-shar) –

+0

[데이터 집합에서 null 값 찾기 - DataRow.IsNull 메서드 vs == DbNull.Value - C#] (http://stackoverflow.com/questions/5599390/finding-null-value-in) -dataset-datarow-isnull-method-vs-dbnull-value-c-shar), 이는 값이 null인지 테스트하는 것입니다. 독자로부터 변수에 이르기까지 –

답변

3

를?

decimal? d= myRdr["myValue"] == DBNull.Value ? null : (decimal?)myRdr["myValue"]; 
1

이 시도 :이 방법에 대해

decimal? d = myRdr["myValue"] != DBNull.Value ? (decimal)myRdr["myValue"] : null; 
0
decimal? d = myRdr[columnName] as decimal?; 

및 확장 방법, 위 :

public static decimal? GetNullableDecimal(this SqlDataReader myRdr, string columnName, decimal? valueIfNull = null) 
{ 
    return myRdr[columnName] as decimal? ?? valueIfNull; 
} 

사용법 :

decimal? d = myRdr.GetNullableDecimal("myValue"); 
decimal? d = myRdr.GetNullableDecimal("myValue", valueIfNull: 0); 

각주

부인. 나는 단지이 읽기, 그것을 테스트하지했습니다 캐스팅이 접두사보다 빠른 5 배 (명시 적) 캐스팅이라고합니다 "로"이 일을해야 http://gen5.info/q/2008/06/13/prefix-casting-versus-as-casting-in-c/

1

:의

decimal? d = myRdr["myValue"] == DBNull.Value ? null : decimal.Parse(myRdr["myValue"].ToString());