【问题标题】:C#: SQLite is storing doubles as integersC#:SQLite 将双精度数存储为整数
【发布时间】:2017-10-26 07:51:57
【问题描述】:

当我尝试将 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

【问题讨论】:

  • 您能发布一些显示 INSERT 的特定 C# 代码吗?
  • 请编辑您的帖子并添加c#相关代码。如果它不是 c# 项目,请编辑它以删除 c# 标记 ;-)
  • 您在哪里将它们视为整数?在数据库表本身中,还是在您检索它们之后?
  • @EdPlunkett 在我检索它们之后,但如果属性类型是 VARCHAR 则不会(然后它们的正确 DOUBLE 值会显示为字符串)。
  • @user2999349 您插入的是带引号的字符串,而不是double。引号表示它是一个字符串。看看史蒂夫丹纳的回答,照他说的做,你会没事的。

标签: c# sqlite types int double


【解决方案1】:

尝试使用参数化查询。我猜 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();

【讨论】:

  • 这个。此外,如果您不这样做,请将字符 ' 从您的值周围删除。您明确告诉 SQLite 它正在将一个字符串值插入到双列中,这就是 SQLite 首先要为转换而烦恼的原因。
  • 虽然使用参数化查询和删除 ' 都是很好的建议,但我会指出原来的应该可以工作。尝试输入:“CREATE TABLE table1(someAttribute DOUBLE); INSERT INTO table1 values('1.5932'); SELECT someAttribute, TYPEOF(someAttribute) from table1;”在命令行工具中,自己看看。 (但请注意,我已将“INSERT INTO table1('1.5932');”更正为正确的语法“INSERT INTO table1 values('1.5932');”。)
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多