首页 新闻 会员 周边 捐助

SQLite在Navicat中查出的结果和 SQLiteAdapter.Fill(DataTable) 方法查出的结果不一致

0
悬赏园豆:20 [已解决问题] 解决于 2019-07-17 14:52



如图,在Navicat中查的结果是1.6,用 SQLiteAdapter.Fill(DataTable) 方法填充到datatable中就变成了2了,有大神遇过这种问题吗,用cast(字段 as double)可以解决,还有其他的解决方法吗

天道茜的主页 天道茜 | 菜鸟二级 | 园豆:241
提问于:2019-07-16 19:26
< >
分享
最佳答案
1

数据库中对应的字段类型是什么?

收获园豆:15
dudu | 高人七级 |园豆:30939 | 2019-07-16 19:44

numeric(12,4)

天道茜 | 园豆:241 (菜鸟二级) | 2019-07-17 09:45

@天道茜: C# 中对应的类型是 decimal ,你怎么知道 1.6 变成 2 的?

dudu | 园豆:30939 (高人七级) | 2019-07-17 10:06

@dudu: 我在sql查询编辑器里面查的值是1.6,但是在代码里填充到Datatable时值就变成了2了

天道茜 | 园豆:241 (菜鸟二级) | 2019-07-17 11:55
dudu | 园豆:30939 (高人七级) | 2019-07-17 13:57

@dudu: 分析了下,应该是sqlite里面NUMERIC同时可以存integer和real类型的值,当插入一个整数时,会自动转为integer类型,带有小数的会存为real类型,SQLiteAdapter.Fill方法会取第一条数据的值作为整列的数据类型,当读取到第一条数据为integer类型时,会自动的将后面的数据全部转为整数。

天道茜 | 园豆:241 (菜鸟二级) | 2019-07-17 14:45

@天道茜: 分析天衣无缝

dudu | 园豆:30939 (高人七级) | 2019-07-17 14:46
其他回答(1)
0

1,你是不是连错了数据库
2,你框起来那个方法里面的代码有没有看,是不是做了类似四舍五入等额外的操作

收获园豆:5
会长 | 园豆:12463 (专家六级) | 2019-07-17 11:56

不是,sql语句是一模一样的,但在查询编辑器和代码里面查的结果不一样,字段类型是numeric(12,4),值是1.6,你可以自己验证一下,只要字段是numeric,第一条数据是整数,第二条是小数,然后在代码里填充到datatable里面第二条也会变成整数

支持(0) 反对(0) 天道茜 | 园豆:241 (菜鸟二级) | 2019-07-17 13:46

@天道茜: 可能和datatable列的数据类型有关,建议使用强类型的dataset试试。就是预先定义好datatable,包括每列的数据类型。题外话,这年头还用dataset?搞个dapper,省很多事情,dapper会自动生成动态类型或指定类型的列表,可以代替datset

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2019-07-17 13:53

@会长: 没办法,公司里面都是这种写法

支持(0) 反对(0) 天道茜 | 园豆:241 (菜鸟二级) | 2019-07-17 14:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册