Vb.net 使用ODBC提供程序读取SQLite数据库:带有浮点值的字段出错

Vb.net 使用ODBC提供程序读取SQLite数据库:带有浮点值的字段出错,vb.net,sqlite,floating-point,odbc,ado,Vb.net,Sqlite,Floating Point,Odbc,Ado,这里是上下文 我正在VB.net中构建一个库,能够在基于windows窗体的前端快速处理SQL数据库数据。我正在使用ADODB连接和记录集。 我设法将前端链接到Access数据库、MS SQL server、MySQL,最近我正在研究SQLite数据库,以提供快速、可移植的SQL提供者 问题出在这里 据我所知,SQLite根据IEEE-7标准存储单/双/浮点值,例如,9.95的存储值将被读取为994999980926514。 因此,当我再次加载记录时,我可以编辑它(其他字段),并更新它。但是如果

这里是上下文

我正在VB.net中构建一个库,能够在基于windows窗体的前端快速处理SQL数据库数据。我正在使用ADODB连接记录集。 我设法将前端链接到Access数据库、MS SQL server、MySQL,最近我正在研究SQLite数据库,以提供快速、可移植的SQL提供者

问题出在这里

据我所知,SQLite根据IEEE-7标准存储单/双/浮点值,例如,9.95的存储值将被读取为994999980926514。 因此,当我再次加载记录时,我可以编辑它(其他字段),并更新它。但是如果我试图编辑浮点值(比如994999980926514>10),然后对其进行更新,那么就会出现一个错误,请参见示例代码

Dim LocRs as ADODB.Recordset
   LocRs.Open("SELECT ID_Montant,Mont_Value,Mont_Date FROM tMontants",SQLConnection)
   LocRs.addNew
   LocRs.("ID_Montant").Value =666
   LocRs.("Mont_Value").Value =9.95
   LocRs.("Mont_Date").Value =Date.Today
   LocRs.Update
   LocRs.close
   'No Problems'
   LocRs.open("SELECT ID_Montant,Mont_Value,Mont_Date FROM tMontants WHERE ID_Montant=666",SQLConnection)
   LocRs.Mont_Date.Value=Date.Today.AddDays(-2)
   Console.WriteLine(LocRs.("Mont_Value").Value) 'Returns 9,94999980926514'
   LocRs.Update
   LocRs.close
   'No Problem again'
   LocRs.open("SELECT ID_Montant,Mont_Value,Mont_Date FROM tMontants WHERE ID_Montant=666",SQLConnection)
   LocRs.("Mont_Value").Value=10
   LocRs.Update
   'Error : Row cannot be located for updating. Some values may have been changed since it was last read. Help Code -2147217864'
错误代码似乎没有什么帮助。 我正在使用

locRs.LockType = LockTypeEnum.adLockOptimistic
locRs.CursorType = CursorTypeEnum.adOpenKeyset
locRs.CursorLocation = CursorLocationEnum.adUseClient
但我尝试了很多组合,但都没有成功。 至于我正在使用的提供商

locRs.LockType = LockTypeEnum.adLockOptimistic
locRs.CursorType = CursorTypeEnum.adOpenKeyset
locRs.CursorLocation = CursorLocationEnum.adUseClient
我在日期字段方面也有类似的问题。 编辑日期不完整的字段时,如2012-03-01 12:00:00,而不是2012-03-01 12:00:00.000,但我通过将日期格式化为完整格式来纠正此问题

现在我不得不这样做,因为SQLite数据库存储的浮点值近似于浮点值,无论我在使用更新存储它之前是否对其进行四舍五入

我猜这是一个提供商在计算更新时的问题,因为我可以这样做

"UPDATE tMontants SET Mont_Value = 10 WHERE ID_Montant = 666"
没问题

但我真的很想强制记录集工作,以便将SQLlite解决方案集成到我迄今为止部署的每个软件中

谢谢你抽出时间