如图,在Navicat中查的结果是1.6,用 SQLiteAdapter.Fill(DataTable) 方法填充到datatable中就变成了2了,有大神遇过这种问题吗,用cast(字段 as double)可以解决,还有其他的解决方法吗
数据库中对应的字段类型是什么?
numeric(12,4)
@天道茜: C# 中对应的类型是 decimal
,你怎么知道 1.6 变成 2 的?
@dudu: 我在sql查询编辑器里面查的值是1.6,但是在代码里填充到Datatable时值就变成了2了
@dudu: 分析了下,应该是sqlite里面NUMERIC同时可以存integer和real类型的值,当插入一个整数时,会自动转为integer类型,带有小数的会存为real类型,SQLiteAdapter.Fill方法会取第一条数据的值作为整列的数据类型,当读取到第一条数据为integer类型时,会自动的将后面的数据全部转为整数。
@天道茜: 分析天衣无缝
1,你是不是连错了数据库
2,你框起来那个方法里面的代码有没有看,是不是做了类似四舍五入等额外的操作
不是,sql语句是一模一样的,但在查询编辑器和代码里面查的结果不一样,字段类型是numeric(12,4),值是1.6,你可以自己验证一下,只要字段是numeric,第一条数据是整数,第二条是小数,然后在代码里填充到datatable里面第二条也会变成整数
@天道茜: 可能和datatable列的数据类型有关,建议使用强类型的dataset试试。就是预先定义好datatable,包括每列的数据类型。题外话,这年头还用dataset?搞个dapper,省很多事情,dapper会自动生成动态类型或指定类型的列表,可以代替datset
@会长: 没办法,公司里面都是这种写法