c# - Sqlite 查询未返回预期值(值应小于 1000 但不是)

标签 c# sqlite

技术是winforms,使用c#和sqlite作为我的数据库。我正在运行这个查询:

   string sql6 = "select YYMM,  TotalTrans from t2 where cast(TotalTrans as Real) < 1000.00";

然后我从查询中获取结果并将它们填充到列表中,然后我用它来填充 ListView 。

问题:
TotalTrans 列的结果似乎明显大于 1000,因为我得到了大量甚至在 100000 内的数字。

我试图修复它:
尝试转换两次,因为我认为出于某种原因 TotalTrans 列没有被转换为浮点数。
    string sql6 = "select YYMM, cast(TotalTrans as Real) from t2 where cast(TotalTrans as Real) < 1000.00"; 

然而,这只会让情况变得更糟,因为我遇到了另一个问题:以下代码中的“索引超出了数组的范围”(位于“reader3[”TotalTrans”] 部分。
    string sql6 = "select YYMM, cast(TotalTrans as Real) from t2 where cast(TotalTrans as Real) < 1000.00";
       SQLiteCommand command3 = new SQLiteCommand(sql6, sqlite_conn);


       SQLiteDataReader reader3 = command3.ExecuteReader();

       while (reader3.Read())
       {

           double TotalTrans;


           DateTime yyyymm;
           if (DateTime.TryParse(reader3["YYMM"].ToString(), out yyyymm) && double.TryParse(reader3["TotalTrans"].ToString(), out TotalTrans))
           {
               YYMM.Add(yyyymm);
               TotalTransIrregularities.Add(TotalTrans);
           }
       }

注:

这是一个附带问题,但主要问题是我发布的原始问题。查询应该返回值 <1000 但显然不是。当我尝试使用我的方法修复它时,我遇到了另一个问题,即索引超出了数组的范围。最好的解决方法是什么?谢谢

最佳答案

由于您正在转换,我将假设 TotalTrans 是一个文本列,并且数据中有一个逗号作为千位分隔符。您需要在转换之前删除逗号,因为 SQLite 似乎将其解释为小数。

select YYMM, TotalTrans from t2 where cast(replace(TotalTrans, ',', '') as Real) < 1000.00

从 select 语句中删除转换将为您提供值 10,000从数据库返回,但从 double.TryParse(...) 开始就可以了将按预期解释逗号(假设您的本地化设置将逗号指定为千位分隔符...)。

下面是我对 SQLite 命令行的实验:
sqlite> create table test2 (value nvarchar(30));
sqlite> insert into test2 (value) values ('10,000');
sqlite> insert into test2 (value) values ('100');
sqlite> insert into test2 (value) values ('15,000');
sqlite> select * from test2;
10,000
100
15,000
sqlite> select cast(value as real) from test2;
10.0
100.0
15.0
sqlite> select cast(replace(value,',','') as real) from test2;
10000.0
100.0
15000.0
sqlite> 

关于c# - Sqlite 查询未返回预期值(值应小于 1000 但不是),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20075010/

相关文章:

perl - 将标量变量保存到数据库(sqlite3)时遇到问题?

c# - 使用 t4 模板在子文件夹中生成类

javascript - 获取 C# 中由 javascript 创建的隐藏字段

c# - 如何在 Visual Studio 2008 或 Visual Studio 2010 中设置 JavaScript 断点

c# - 在 System.Windows.Forms.WebBrowser 中添加 HTTP header 和发布数据

Android 应用程序可以离线和在线工作吗?我应该以哪种方式同步数据?

c# - 在另一个对象中实例化一个对象? (C#)

android - 使用 Android 共享首选项来存储大量数据是个好主意吗?

sqlite - 无法在移动设备上运行的通用 Windows 应用程序中加载 DLL sqlite3

android - 在使用 ORMLite 和 Android 时,是否有一种简单的方法来添加上次修改的时间戳?