C# Sqlite查询未返回预期值(值应

C# Sqlite查询未返回预期值(值应,c#,sqlite,C#,Sqlite,技术是winforms,使用c和sqlite作为我的数据库。我正在运行此查询: string sql6 = "select YYMM, TotalTrans from t2 where cast(TotalTrans as Real) < 1000.00"; 然后,我从查询中获取结果并将其填充到列表中,然后使用列表填充listview 问题: TotalTrans列的结果似乎明显大于1000,因为我得到了大量的数字,这些数字甚至在100000中 我试图做什么来修复它: 尝试了两次

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

   string sql6 = "select YYMM,  TotalTrans from t2 where cast(TotalTrans as Real) < 1000.00";
然后,我从查询中获取结果并将其填充到列表中,然后使用列表填充listview

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

我试图做什么来修复它: 尝试了两次强制转换,因为我认为出于某种原因TotalTrans列没有被转换为float

    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);
           }
       }
注:


这是一个次要问题,但主要问题是我发布的原始问题。查询应该返回值,因为您正在转换,所以我将假设TotalTrans是一个文本列,并且数据中有一个逗号作为千位分隔符。转换之前需要删除逗号,因为SQLite似乎将其解释为十进制

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

索引超出边界的边问题看起来像是名称问题。更改查询以选择YYMM,castTotalTrans与TotalTrans一样真实。。。这应该可以解决一个问题。这毫无意义。分隔符可能有问题:您的数据是否有数千个分隔符?这一点很好。表本身的定义是什么?@LS_dev你是对的,我检查了数据,它有1000个分隔符,但数字没有小数。所以我只是将数据转换成整数而不是实数,瞧,问题解决了。你可能想把你的回答作为一个答案,这样我们就可以将这个问题标记为成功回答。嘿,谢谢你解释得很好的回答,但我发现专栏中的文本没有小数,所以我只是将它转换为int而不是real,问题解决了,不用担心。我来这里是为了随机的现实问题,因为我喜欢挑战。谢谢你的怪屁股问题!你的测试很酷!我很确定我以后会需要这个:
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>