将十进制值从 C# 传递到 SQL 数据库的问题

Problems with Passing Decimal Values From C# to SQL Database

我正在尝试将十进制值从 C# 传递到 SQL 数据库。我构建了一个 INSERT 查询字符串并使用 SqlCommand 将其发送。我遇到的问题是,当我在 Windows 表单中输入值时,它们会以逗号分隔小数点(即 55,679)保存。这在 SQL 查询字符串中很明显(我已经通过调试进行了检查)。但似乎数据库查询需要一个小数点(即 55.679)。这可能与我所在的地区和那里的标准有关(即欧洲使用“,”作为小数点分隔符)。有人知道怎么设置吗?

函数的代码如下。问题存在于Vmax、Vmin、Imax。

public bool addBattery(Battery b)
    {
        bool outcome = false;

        string sql = @"INSERT INTO [BATTERY_INFO]
            (BatteryType, VoltageMax, VoltageMin, Capacity, CurrentMax, Manufacturer, Serial)
            VALUES ('" + b.BatteryType.ToString() + "'," + b.Vmax + "," + b.Vmin + "," 
            + b.Capacity + ","+b.Imax+ ",'"+b.Manufacturer.ToString()+"','"+b.Serial.ToString()+"')";

        SqlCommand command = new SqlCommand(sql, this.sql_conn);

        try
        {
            command.ExecuteNonQuery();
            MessageBox.Show("Inserted Battery Successfully");
            outcome = true;
        }
        catch (Exception e)
        {
            MessageBox.Show("SQL INSERT error \n\n" + e.Message);
        }


        return outcome;
    }

正如评论中指出的那样,使用参数化查询将解决小数问题,并防止可能的安全风险,例如 sql 注入。该方法看起来像这样。

我假设你 Open()Close() 连接在别处,因为我在你的代码中没有看到。

        {
        bool outcome = false;
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = this.sql_conn;

        cmd.Parameters.AddWithValue("BatteryType", b.BatteryType);
        cmd.Parameters.AddWithValue("VoltageMax", b.Vmax);
        cmd.Parameters.AddWithValue("Capacity", b.Capacity);
        cmd.Parameters.AddWithValue("CurrentMax", b.Imax);
        cmd.Parameters.AddWithValue("Manufacturer", b.Manufacturer.ToString());
        cmd.Parameters.AddWithValue("Serial", b.Serial.ToString());

        try
        {
            cmd.ExecuteNonQuery();
            MessageBox.Show("Inserted Battery Successfully");
            outcome = true;
        }
        catch(Exception e)
        {
            MessageBox.Show("SQL INSERT error \n\n" + e.Message);
        }

        return outcome;
    }