Vb.net 使用ODBC提供程序读取SQLite数据库:带有浮点值的字段出错
这里是上下文 我正在VB.net中构建一个库,能够在基于windows窗体的前端快速处理SQL数据库数据。我正在使用ADODB连接和记录集。 我设法将前端链接到Access数据库、MS SQL server、MySQL,最近我正在研究SQLite数据库,以提供快速、可移植的SQL提供者 问题出在这里 据我所知,SQLite根据IEEE-7标准存储单/双/浮点值,例如,9.95的存储值将被读取为994999980926514。 因此,当我再次加载记录时,我可以编辑它(其他字段),并更新它。但是如果我试图编辑浮点值(比如994999980926514>10),然后对其进行更新,那么就会出现一个错误,请参见示例代码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。 因此,当我再次加载记录时,我可以编辑它(其他字段),并更新它。但是如果
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解决方案集成到我迄今为止部署的每个软件中
谢谢你抽出时间