将数据类型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);
}
}
有什么建议吗?
我怀疑连接到查询字符串的值之一应该是浮点数,因此不应该用单引号括起来(例如:'"+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);
}