【发布时间】:2015-01-22 08:35:50
【问题描述】:
我有一个将一些数据写入 SQLite 数据库的 C# 应用程序,当我尝试将 C# double 存储到 SQLite REAL 字段时出现问题。
它使用逗号作为小数分隔符将其保存到数据库中(在我的国家通常,不确定它是否重要)。
表格结构如下:
CREATE TABLE `valoresStock` (
`Fecha` TEXT,
`IdArticulo` TEXT,
`IdColor` INTEGER,
`KgPorUnidad` REAL,
`Stock` REAL,
`CostePorKg` REAL,
`CostePorUnidad` REAL,
PRIMARY KEY(Fecha,IdArticulo,IdColor)
);
我在应用中使用的查询如下:
cmd.CommandText = "INSERT INTO valoresStock (Fecha, IdArticulo, IdColor, KgPorUnidad, Stock, CostePorKg, costePorUnidad) VALUES ('" + DateTime.Today + "','" + referencia.idArticulo + "', '" + referencia.idColor + "', '" + referencia.kilos + "', '" + referencia.stockActual + "', '" + referencia.valorPorKg + "', '" + referencia.valorPorUnidad + "') ";
正如我所说,最后四个字段是 double 类型。没有给出错误。
那么数据存储如下:
也就是说,没有小数部分的时候用点,有小数的时候用逗号。
这个问题是例如当我使用SELECT语句来计算时,例如:
SELECT VS.Fecha, VS.IdArticulo, VS.IdColor, (VS.Stock * (VS.CostePorUnidad + VS.CostePorKg * Vs.KgPorUnidad)) AS Valor FROM valoresStock VS
这给出了以下结果,这是错误的(只取带点的数字)。
因此,如果我手动更改表格中点的逗号,它可以正常工作。
但是如何让我的应用做到这一点,某种文化改变?
或者我可以让 SQLite 理解或自动转换逗号吗?
如果 SQLite 以后不理解该数字,为什么它会接受该数字为有效数字?
【问题讨论】:
-
又一个您应该使用参数化查询的机会。
-
你能进一步解释一下吗?
-
我已经在回答中描述过了。