C#浮点变量在插入mysql数据库后丢失小数

时间:2018-08-26 11:07:59

标签: c# php mysql windows-server

我这里有一个很奇怪的问题!

我编写了一个C#控制台应用程序,以从预定义的IP地址获取数据,在计算之后,我希望将数据插入到MySQL数据库中,以便我可以读取它并进行更多操作使用PHP网络应用程序进行计算,

在我的笔记本电脑上,一切运行正常,

当我在服务器上运行C#应用程序时,数据将得到完美处理,直到插入数据的最后一步为止,但是当插入数据时,它就像一个整数,没有小数。

我使用VS Studio工具并跟踪了变量,即使在sql语句中它们也是正确的,但在数据库上它们却失去了小数位数。

我在笔记本电脑上使用Windows 10,并且服务器上装有Windows Server 2016

这是C#代码:

public static string send_to_db(int uid, float prs, float btlvl, float f1, float f2, double t1, double t2, int dState, int supState, string datetime, string stmt)
    {
        MySqlConnection connection = null;
        string feedback = "";
        double min_prs_val = 0, max_prs_val = 0;

        // voltage to percentage the btlvl

        btlvl = (btlvl * 100) / 12;

        try
        {
            connection = new MySqlConnection(stmt);
            connection.Open();
            MySqlCommand insertData = new MySqlCommand($"INSERT INTO pm_data_records (pm_detail_id, pm_pressure, pm_battery_charge, pm_flow1, pm_flow2, pm_tot1, pm_tot2, pm_door, pm_sup, pm_sent_time) VALUES('{uid}','{prs}','{btlvl}','{f1}','{f2}','{t1}','{t2}','{dState}','{supState}','{datetime}')", connection);
            insertData.ExecuteNonQuery();
            MySqlCommand updateData = new MySqlCommand($"UPDATE pm_data_last SET pm_detail_id = '{uid}', pm_pressure = '{prs}', pm_battery_charge = '{btlvl}', pm_flow1 = '{f1}', pm_flow2 = '{f2}', pm_tot1 = '{t1}', pm_tot2 = '{t2}', pm_door = '{dState}', pm_sup = '{supState}', pm_sent_time = '{datetime}' WHERE pm_detail_id = '{uid}'", connection);
            updateData.ExecuteNonQuery();

            ...

我在服务器上安装了Visual Studio,并从笔记本电脑中复制了代码并在那里进行了编译(为vs文件安装了MySQL之后),仍然没有小数点,

我没有想法,请帮帮我! tnx

1 个答案:

答案 0 :(得分:1)

  1. 永远不要像这样使用字符串插值来构建带有参数的查询字符串。

    • 这是安全问题;
    • 您的值可能未正确格式化和转义。所以也许问题出在那儿。

您应该执行以下操作:

using (var command = new MySqlCommand('INSERT INTO pm_data_records (pm_detail_id, pm_pressure, pm_battery_charge, pm_flow1, pm_flow2, pm_tot1, pm_tot2, pm_door, pm_sup, pm_sent_time) VALUES (@uid, @prs, @btlvl, @f1, @f2, @t1, @t2, @dState, @supState, @datetime)', connection))
{
    command.Parameters.AddWithValue("@uid", uid);
    command.Parameters.AddWithValue("@prs", prs);
    command.Parameters.AddWithValue("@btlvl", btlvl);
    ...
    command.ExecuteNonQuery();
}
  1. 检查数据库中列的数据类型。也许他们不允许浮点数。