【问题标题】:Insert decimal values into MySQL with C#使用 C# 将十进制值插入 MySQL
【发布时间】:2017-02-14 17:51:39
【问题描述】:

我正在解决以下问题,但找不到答案。

我有以下代码:

    public void CreateCmd (string g_cmd,params object[] g_params)
    {
        int i = 0;
        MySqlCommand cmd = verbindung.CreateCommand();
        cmd.CommandText = g_cmd;
        foreach(object param in g_params)
        {
            cmd.Parameters.AddWithValue("?param"+i.ToString(), param.ToString());
            i++;
        }
        verbindung.Open();
        cmd.ExecuteNonQuery();
    }

该方法运行良好(到目前为止),但如果我想在 MDB 中插入一个 double,它会被数据库缩短(?)。例如:

我调用该方法的代码:

database.CreateCmd("INSERT INTO `orders` (`id`, `time`, `tax`, `netto`, `brutto`) VALUES(NULL, CURRENT_TIMESTAMP, ?param0, ?param1, ?param2)", 0.19, 201.5, 239.785);

PHPMyAdmin 中显示的输入: Screenshot from PHPMyAdmin

表的结构(我尝试过不同的数据类型): another cs of MDB

希望你能告诉我我做错了什么。

问候 极性

【问题讨论】:

  • 也许太早了,我的轮子还没有开始完全转动,但是你说“MDB”是什么意思? 这让我觉得你在谈论 MSAccess。
  • 我使用 XAMPP 和 MariaDB (MDB) 而不是 MySQL。我知道它几乎是类似的,但我不知道这是否是它不起作用的原因。
  • AddWithValue 无法提前知道数据库上的数据类型是什么,因此由于您的 ToString() ,它会构建一个字符串参数,但这会使用您的语言环境设置将您的输入转换为字符串。数据库不喜欢逗号作为小数点分隔符,想要一个点。
  • 哦,你是对的。我试图添加一个 .replace(",",".") 之前,但它没有用。不知道为什么现在它起作用了!谢谢! PS:我是 StackOverflow 的新手,但我建议我应该为欧洲人写答案,对吧?
  • 前面已经给出了答案。

标签: c# mysql double decimal mariadb


【解决方案1】:

这可能是文化问题,数据库需要逗号 (,) 而不是句点 (.)?

否则,根据 MariaDb 的文档 here,检查数据库是否设置为 UNSIGNED

另外,由于您要存储资金,请注意浮点问题。也许您应该考虑改为定点?

【讨论】:

    【解决方案2】:

    没错。

    修改后

    cmd.Parameters.AddWithValue("?param"+i.ToString(), param.ToString());
    

    到

    cmd.Parameters.AddWithValue("?param"+i.ToString(), param.ToString().Replace(",","."));
    

    它有效。谢谢!

    【讨论】:

      猜你喜欢
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2015-05-04
      相关资源
      最近更新 更多