【发布时间】:2016-12-02 20:25:59
【问题描述】:
我现在完全被 SQLite 搞糊涂了。 我使用 C# 的 System.Data.SQLite 版本
我有两个表:
表 1: 在其中,我创建了两列(更多,但在这种情况下它们很重要,并且该语句很长才能发布)。第一个称为 RecStat,第二个称为 DOXinM。 两者都是 Decimal 并且是这样创建的: ...
[RectStat] Decimal,
[DOXinM] Decimal,
...
Create Table 语句如下所示:
Create Table If Not Exists "Table1"
(..Columns..);
当我在这个表中插入一个值时,小数点工作得很好,当我读出它时,它也可以在 xaml GUI 上工作。
之后我创建了第二个表,它也有一个小数列。 我以同样的方式创建了表格(这是一个简短的表格,所以我可以给出整个声明)
Create Table If Not Exists "Table2" (
[ID] Integer Not Null Primary Key,
[Material] VarChar(10],
[Thickness] Decimal);
用于创建的 C# 代码(请注意,我为所有 SQL 命令使用 const 字符串):
mySQLiteCommand.CommandText = @"" + DatabasePara.CREATE_SQL + " " + DatabasePara.TABLE_SQL + " " + DatabasePara.IF_SQL + " " + DatabasePara.NOT_SQL + " " + DatabasePara.EXISTS_SQL + " " + DBTableFilter.Filter + "
mySQLiteCommand.CommandText += @"([" + DBTableFilter.ID + "] " + DatabasePara.INTEGER_SQL + " " + DatabasePara.NOT_SQL + " " + DatabasePara.NULL_SQL + " " + DatabasePara.PRIMARYKEY_SQL + ", ";
mySQLiteCommand.CommandText += @"[" + DBTableFilter.Material + "] " + DatabasePara.VARCHAR_SQL + "(360), ";
mySQLiteCommand.CommandText += @"[" + DBTableFilter.Thickness + "] " + DatabasePara.DECIMAL_SQL + ");";
mySQLiteCommand.ExecuteNonQuery();
在这两种情况下,我都对小数列执行相同的插入操作:
Insert into Table1 ('RectStat') values ('10.5');
Insert into Table1 ('DOXinM') values ('1.3');
Insert into Table2 ('Thickness') values ('0.25');
对于 Table2 插入:
for (int FilterIndex = 0; FilterIndex < Database.FilterTable.FilterList.Count; FilterIndex++)
{
mySQLiteCommand.CommandText = @"" + DatabasePara.INSERTINTO_SQL + " " + DBTableFilter.Filter + "(" + DBTableFilter.Material + ", " + DBTableFilter.Thickness + ") ";
mySQLiteCommand.CommandText += @"" + DatabasePara.VALUES_SQL + " ('" + Database.FilterTable.GetFilterAt(FilterIndex).Material_Property + "', " + Database.FilterTable.GetFilterAt(FilterIndex).Thickness_Property + ");";
mySQLiteCommand.ExecuteNonQuery();
}
现在数据库将前两个语句插入为 10.5/1.3,最后一个语句插入为 0,25 当我读出值时,前两个工作得很好,但最后一个显示没有小数点“点”后的数字。
所以我的问题是。 为什么会发生这种情况? (顺便说一句,我的表中有 20 多个小数列,而“厚度”是唯一存在此问题的列)
我希望你能帮助我。
提前致谢 理查德
我尝试过的:
尝试了不同的值(希望是因为 0.25) 在没有''的情况下尝试过。但比声明认为它有两列的三个值...
【问题讨论】:
-
id 猜测是因为它使用的默认语言设置。
-
我在哪里可以找到它们?为什么会有不同的行为?
-
@derpirscher 我为问题表添加了 C# 代码
-
@BugFinder 我的问题(遗憾的是)与您的链接中的问题不完全相同。我的问题是 ot 20 小数只有一个不起作用。我使用所有插入语句的参数。 (也许我错过了你的重点)