将数据类型varchar转换为float

本文关键字:float 转换 varchar 数据类型 | 更新日期: 2023-09-27 17:49:20

我只需要通过计算一些数字来更新数据库中的一些单元格。但我不知道为什么有一个异常仍然弹出:转换数据类型varchar浮动。你有什么想法吗?我已经看了两个小时了…

        Item oldItem = new Item();
        Item newItem = new Item();
        oldItem = cmbItems.SelectedItem as Item;
        newItem.PredaneMnozstvo = oldItem.PredaneMnozstvo + 1;
        newItem.Mnozstvo = oldItem.Mnozstvo - 1;
        if(!String.IsNullOrEmpty(txtAkcia.Text))
            newItem.HrubyZisk = oldItem.PredajnaCena - oldItem.NakupnaCena - double.Parse(txtAkcia.Text);
        else
            newItem.HrubyZisk = oldItem.PredajnaCena - oldItem.NakupnaCena;
        newItem.CistyZisk = Math.Round(newItem.HrubyZisk * 0.81,2);
        broker.UpdatePredal(newItem, oldItem);
    public void UpdatePredal(Item newItem, Item oldItem)
    {
    try
        {
            string sql = "UPDATE Sklad SET Mnozstvo= '"+newItem.Mnozstvo+"', PredaneMnozstvo= '"+newItem.PredaneMnozstvo+"',HrubyZisk= '"+newItem.HrubyZisk.ToString()+"', CistyZisk='"+newItem.CistyZisk+"' WHERE ID=" + oldItem.Id;
            cmd = new SqlCommand(sql, connection);
            connection.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception eX)
        {
            MessageBox.Show(eX.Message);
        }
     }

有什么建议吗?

将数据类型varchar转换为float

我怀疑连接到查询字符串的值之一应该是浮点数,因此不应该用单引号括起来(例如:'"+newItem.HrubyZisk.ToString()+"')。

无论如何,更好地解决您的问题是使用参数化查询,这将节省您从sql注入和转换特定数据类型(如DateTime, Decimal等)到它的字符串表示的复杂性,根据数据库特定文化是有效的。例如:

try
{
    string sql = "UPDATE Sklad SET Mnozstvo= @Mnozstvo, PredaneMnozstvo= @PredaneMnozstvo, HrubyZisk= @HrubyZisk, CistyZisk=@CistyZisk WHERE ID=@ID";
    cmd = new SqlCommand(sql, connection);
    cmd.Parameters.AddWithValue("@Mnozstvo", newItem.Mnozstvo);
    cmd.Parameters.AddWithValue("@PredaneMnozstvo", newItem.PredaneMnozstvo);
    cmd.Parameters.AddWithValue("@HrubyZisk", newItem.HrubyZisk);
    cmd.Parameters.AddWithValue("@CistyZisk", newItem.CistyZisk);
    cmd.Parameters.AddWithValue("@ID", oldItem.Id);
    connection.Open();
    cmd.ExecuteNonQuery();
}
catch (Exception eX)
{
    MessageBox.Show(eX.Message);
}