【问题标题】:SQLite gets int instead of floatSQLite 获取 int 而不是 float
【发布时间】:2020-11-23 00:04:56
【问题描述】:

在 Unity 中,我想将数据库表中的鼠标灵敏度值 (float) 保存为 REAL。但由于某种原因,它会舍入该值,所以如果我有值 1.0,它会节省 1.0,但如果是,例如 0.65,它会节省 0.0。这是查询:

foreach (KeyValuePair<string, float> kv in mouse)
    {
        MyDataBase.ExecuteQueryWithoutAnswer("UPDATE Mouse SET value = '" + kv.Value.ToString() + "' WHERE option = '" + kv.Key + "'");
    }

其他类型保存正确。

【问题讨论】:

  • 尝试使用参数而不是依赖于文化的字符串表示形式
  • 您正在将数值转换为字符串。然后将此字符串传递给需要将该字符串存储在数字字段中的数据库引擎,以便执行另一次转换。最终结果是一个错误。相反,如果您使用正确数据类型的参数并将正确的数据类型作为值传递,则不会执行转换,也不会误解小数分隔符。

标签: c# sqlite unity3d


【解决方案1】:

发现了那个逗号而不是点。编写了这段令人毛骨悚然的代码,现在它可以工作了。

foreach (KeyValuePair<string, float> kv in mouse)
    {
        string s = ((int)kv.Value).ToString() + "." + ((kv.Value - (int)kv.Value) * 100).ToString();
        MyDataBase.ExecuteQueryWithoutAnswer("UPDATE Mouse SET value = '" + s + "' WHERE option = '" + kv.Key + "'");
    }

【讨论】:

  • 是的,您手头有一个真正错误的解决方案。再次查看如何使用参数编写该查询。我会举个例子,但如果没有看到 ExecuteQueryWithoutAnswer 的代码,我就不能给你它
  • 此外,其他类型保存正确。不,您没有使用此方法正确保存它们。例如,如果您有一个包含单词 O'Brian 的字符串(字符串中的引号)会发生什么情况。现在让我们谈谈避免这种方法的另一个重要原因。聊聊Sql Injection
猜你喜欢
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 2023-01-16
相关资源
最近更新 更多