c#float变量在被插入mysql数据库后会丢失小数

c90pui9n  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(328)

我有个很奇怪的问题!
我写了一封信 C# 控制台应用程序从预定义的ip地址获取数据,经过计算,我想把数据插入到一个 MySQL 数据库,以便我可以读取它,并做更多的计算,如果需要使用 PHP web应用程序,
在我的笔记本电脑上一切都很正常,
当我运行 C# 在服务器上的应用程序,数据被完美地处理,直到最后一步插入它,但是当它插入数据时,它就像一个整数,没有小数。
我使用vs studio工具并跟踪我的变量,即使在 sql 但在数据库里,他们失去了小数。
我在笔记本电脑上使用Windows10,服务器上有WindowsServer2016
这是你的答案 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();

            ...

我在服务器上安装了visualstudio,从我的笔记本电脑上复制了代码并在那里进行了编译(在安装了 MySQL 对于vs文件),仍然没有小数,
我没主意了,帮帮我!tnx公司

r1zhe5dt

r1zhe5dt1#

您不应该像这样使用字符串插值来构建带有参数的查询字符串。
这是安全问题;
您的值可能没有正确格式化和转义。所以也许问题确实存在。
你应该这样做:

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();
}

检查数据库中列的数据类型。也许他们不允许浮点数。

相关问题