2017-05-25 183 views
0

当我尝试将DOUBLE值插入到我的SQLite表中时,它们以某种方式自动转换为INT值,即使我将属性类型定义为DOUBLE或REAL。但是,如果我改变属性类型,例如VARCHAR它不正确地存储我插入DOUBLE值...创建该表的SQL语句的形式为:C#:SQLite存储双精度作为整数

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 
+0

你可以发布一些特定的C#代码显示INSERT吗? –

+1

请编辑您的帖子并添加c#相关代码。如果它不是一个C#项目,请编辑它以删除C#标记;-) – bradbury9

+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(); 
+2

这个。另外,如果你不这样做,就放弃你的价值。您明确告诉SQLite它将字符串值插入到双列中,这就是为什么SQLite首先困扰于转换。 – CDove

+0

虽然使用参数化查询并删除'都是好建议,但我会指出原始应该工作。尝试输入:“CREATE TABLE table1(someAttribute DOUBLE); INSERT INTO table1 values('1.5932'); SELECT aAttribute,TYPEOF(someAttribute)from table1;”在命令行工具中,看看你自己。 (注意,虽然,我已经更正了“INSERT INTO table1('1.5932');”到正确的语法“INSERT INTO table1 values('1.5932');”。) – varro

相关问题