대퍼, 십진수 배로? 열 X를 구문 분석하는 중 오류가 발생했습니다.

dapper oracle parsing

문제

내 데이터베이스는 오라클입니다. 나는 사용자 Dapper 1.13을 사용하여 Error parsing column 3 (LATITUDE=39.2330 - Decimal) 이라는 예외를 throw합니다. LATITUDE는 double? 내 엔티티를 입력하십시오.

도와주세요.

감사

수락 된 답변

그래, 그건 벌레 야. 기본적으로 2367 번 라인을 변경합니다 (와우, 언제 그 파일이 커지나요?) :

il.Emit(OpCodes.Ldtoken, unboxType);

에:

il.Emit(OpCodes.Ldtoken, Nullable.GetUnderlyingType(unboxType) ?? unboxType);

기본적으로,이 방출된다 (decimal?)Convert.ChangeType(val, typeof(decimal?))방출되어야 할 때 (decimal?)Convert.ChangeType(val, typeof(decimal)) (모든 중요한주의 ?typeof ).

편집 : 실제로, 내가 git에 푸시 한 픽스는 Convert.ChangeType 수정하는 것보다 약간 더 복잡하다. 필요에 따라 연산자를 해석하므로 decimal <===> double 변환은 IL static-call을 사용한다.

이것은 다음 빌드에서 수정 될 것입니다. 또는 로컬로 구축 할 수도 있습니다. 다음은 이제 전달됩니다.

public void TestDoubleDecimalConversions_SO18228523_RightWay()
{
    var row = connection.Query<HasDoubleDecimal>(
        "select cast(1 as float) as A, cast(2 as float) as B, cast(3 as decimal) as C, cast(4 as decimal) as D").Single();
    row.A.Equals(1.0);
    row.B.Equals(2.0);
    row.C.Equals(3.0M);
    row.D.Equals(4.0M);
}
public void TestDoubleDecimalConversions_SO18228523_WrongWay()
{
    var row = connection.Query<HasDoubleDecimal>(
        "select cast(1 as decimal) as A, cast(2 as decimal) as B, cast(3 as float) as C, cast(4 as float) as D").Single();
    row.A.Equals(1.0);
    row.B.Equals(2.0);
    row.C.Equals(3.0M);
    row.D.Equals(4.0M);
}
public void TestDoubleDecimalConversions_SO18228523_Nulls()
{
    var row = connection.Query<HasDoubleDecimal>(
        "select cast(null as decimal) as A, cast(null as decimal) as B, cast(null as float) as C, cast(null as float) as D").Single();
    row.A.Equals(0.0);
    row.B.IsNull();
    row.C.Equals(0.0M);
    row.D.IsNull();
}

class HasDoubleDecimal
{
    public double A { get; set; }
    public double? B { get; set; }
    public decimal C { get; set; }
    public decimal? D { get; set; }
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow