C#:SQLite将双精度存储为整数

时间:2017-05-25 15:30:30

标签: c# sqlite types int double

当我尝试将DOUBLE值插入到我的SQLite表中时,它们会以某种方式自动转换为INT值,即使我将属性类型定义为DOUBLE或REAL也是如此。但是,如果我将属性类型更改为例如VARCHAR,它会正确存储我插入的DOUBLE值...用于创建表的SQL语句具有以下形式:

CREATE table (someAttribute DOUBLE)

和INSERT查询:

INSERT into table(someDoubleValue) // => e.g. 1.5932 gets stored as 1

如果有人知道为什么会这样,以及我如何解决它(以便它实际上将DOUBLE值存储为DOUBLE),我们非常感激!

编辑:C#代码如下:

SQLiteCommand command = new SQLiteCommand("CREATE TABLE table1(someAttribute DOUBLE)", m_dbConnection);
command.ExecuteNonQuery(); 
command.CommandText = "INSERT INTO table1('1.5932')";
command.ExecuteNonQuery();
command.CommandText = "SELECT * FROM table1";
SQLiteDataReader reader = command.ExecuteReader();
            while (reader.Read())
                Console.WriteLine("value: "+reader["someAttribute"]); //this will display an integer value instead of a double

1 个答案:

答案 0 :(得分:3)

尝试使用参数化查询。我猜测SQLite引擎正在将你的字符串转换为INT,从而失去你的精确度。

SQLiteCommand command = new SQLiteCommand("CREATE TABLE table(someAttribute DOUBLE)", m_dbConnection);
command.ExecuteNonQuery(); 
command.CommandText = "INSERT INTO table(@val)";
command.Parameters.Add("@val", 1.5932m);
command.ExecuteNonQuery();