我只需要通过计算一些数字来更新数据库中的一些单元格。但我不知道为什么还有一个异常仍然存在:将数据类型varchar转换为float。有什么想法可能是错的?我在这看了2个小时......
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);
}
}
有什么建议吗?
答案 0 :(得分:2)
我怀疑连接到查询字符串的值之一应该是一个浮点数,因此不应该用单引号括起来(例如:'"+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);
}