DBNull.Value를 'System.Decimal' 형식으로 캐스팅할 수 없습니다. nullable 형식을 사용하십시오. 오류를 해결해 보도록 합시다. 😊
DBNull.Value를 decimal 형식으로 직접 비교하려고 하면 오류가 발생할 수 있는데요, 이 경우에는 DBNull.Value 여부를 점검하도록 추가하여 해결할 수 있습니다.
다음과 같이 시도하였을 때 오류가 발생할 수 있어요.
//DBNull.Value를 'System.Decimal' 형식으로 캐스팅할 수 없습니다. nullable 형식을 사용하십시오.
if (x.Field<decimal>("column_name").Equals(DBNull.Value) == false) { }
위의 코드는, x.Field<decimal>("column_name")에서 decimal 형식으로 캐스팅하려는 시도 때문에 오류가 발생할 가능성이 있습니다. DBNull.Value를 처리할 때는 먼저 필드가 DBNull인지 확인하고, 그 이후에 값을 처리해야 합니다.
이를 해결하기 위해 Nullable<decimal> 또는 decimal? 형식을 사용하거나, 우선적으로 DBNull.Value 여부를 체크하는 것이 좋습니다. 코드 수정 예시는 다음과 같습니다.
if (x["column_name"].Equals(DBNull.Value) == false) { }
Nullable decimal 사용
//Nullable<decimal>
decimal? value = x.Field<decimal?>("column_name");
if (value.HasValue)
{
//
}
DBNull.Value 여부 먼저 확인
if (x["column_name"] != DBNull.Value)
{
decimal value = (decimal)x["column_name"];
}
Convert.IsDBNull 사용
if (!Convert.IsDBNull(x["column_name"]))
{
decimal value = (decimal)x["column_name"];
}
이러한 방식으로 DBNull.Value와의 비교를 먼저 처리하면, decimal 형식과의 캐스팅 문제를 해결할 수 있어요.
