Oracle 整洁,十进制到双精度?分析列X时出错
我的数据库是Oracle。我使用了Dapper 1.13,它抛出了一个异常,表示解析第3列时出错(纬度=39.2330-十进制)。LATITUDE是我的实体中的Oracle 整洁,十进制到双精度?分析列X时出错,oracle,parsing,dapper,Oracle,Parsing,Dapper,我的数据库是Oracle。我使用了Dapper 1.13,它抛出了一个异常,表示解析第3列时出错(纬度=39.2330-十进制)。LATITUDE是我的实体中的double?类型 请帮帮我 谢谢是的,这是一个bug;在本地修复-基本上,将第2367行(哇,那个文件什么时候变得这么大?)更改为: 致: 基本上,它正在发出:(十进制?)Convert.ChangeType(val,typeof(十进制?)当它应该发出(十进制?)Convert.ChangeType(val,typeof(十进制))(
double?
类型
请帮帮我
谢谢是的,这是一个bug;在本地修复-基本上,将第2367行(哇,那个文件什么时候变得这么大?)更改为: 致: 基本上,它正在发出:
(十进制?)Convert.ChangeType(val,typeof(十进制?)
当它应该发出(十进制?)Convert.ChangeType(val,typeof(十进制))
(注意typeof
中最重要的?
)
Edit:实际上,我推送到git的修复程序比修复Convert.ChangeType
要复杂一些-它现在根据需要解析运算符,因此十进制
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; }
}
public void TestDoubleDecimalConversions_SO18228523_RightWay()
{
var row=connection.Query(
“选择强制转换(1为浮点)作为A,强制转换(2为浮点)作为B,强制转换(3为十进制)作为C,强制转换(4为十进制)作为D”)。Single();
第A行等于(1.0);
第B行等于(2.0);
排C等于(3.0M);
D排等于(4.0M);
}
public void TestDoubleDecimalConversions_SO18228523_errowway()
{
var row=connection.Query(
“选择强制转换(1为十进制数)作为A,强制转换(2为十进制数)作为B,强制转换(3为浮点数)作为C,强制转换(4为浮点数)作为D”)。Single();
第A行等于(1.0);
第B行等于(2.0);
排C等于(3.0M);
D排等于(4.0M);
}
public void TestDoubleDecimalConversions_SO18228523_Nulls()
{
var row=connection.Query(
“选择强制转换(null为十进制)作为A,强制转换(null为十进制)作为B,强制转换(null为浮点)作为C,强制转换(null为浮点)作为D”)。Single();
第A行等于(0.0);
行B.IsNull();
排C等于(0.0M);
第D行为空();
}
类具有双十进制
{
公共双精度A{get;set;}
公共双精度B{get;set;}
公共十进制C{get;set;}
公共十进制数?D{get;set;}
}
你能给我们看一下你使用的代码吗?@Hexie-meh,我想这已经足够重新编写了
il.Emit(OpCodes.Ldtoken, Nullable.GetUnderlyingType(unboxType) ?? unboxType);
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; }
}