如何防止从 DataGridView c# 将小数点存储在数据库中
本文关键字:存储 数据库 小数点 何防止 DataGridView | 更新日期: 2023-09-27 18:34:09
我是c#的新手,使用Windows表单。我将Datagridview
设置为仅接受数字和一个小数点。
我将Datagridview
单元格值存储/更新到 sql 表中(货币列类型(。我不想将小数点本身存储到 sql 表中,因为 sql 不会接受它并且会抛出异常(因为只接受双精度值(
所以我写了这段代码来防止小数点本身存储到 sql 表中:
private void updateButton_Click(object sender, EventArgs e)
{
// connection string and the rest of sql stuff....
MyCommand.CommandText = "UPDATE Table1 SET ........");
MyCommand.Parameters.Add("@value1", SqlDbType.Money);
if (Convert.ToChar(dataGridView1.Rows[0].Cells[1].Value) != '.')// if not dot then store it in database
{
MyCommand.Parameters["@value1"].Value = Convert.ToDecimal(dataGridView1.Rows[0].Cells[1].Value);
}
}
但是,每当我在Row0, column1
中单独输入小数点并单击更新按钮时,此代码不起作用并且仍然会引发异常(输入字符串格式不正确(。谁能告诉我为什么 if 条件不起作用?我怎样才能让它工作。谢谢
这里的问题似乎不在于SQL命令,而在于从string
(在DataGridView
中(到double
的转换失败(如@Kevin提到的(。
那么为什么会失败呢?我们只能猜测,因为我们不知道单元格目前持有的确切值。显然,对'.'
字符的检查不起作用。如果您使用另一种语言(例如德语,其中使用','
(,这将有问题。
因此,我建议三点:
第一:
打印出调试输出的确切值(System.Diagnostics.Debug.WriteLine(dataGridView1.Rows[0].Cells[1].Value)
(,以查看您获得的确切值以及原因。这只是一个学习目的,看看你的代码失败的原因以及可能发生的其他不当行为。
第二:
使用Decimal.TryParse
代替支票'.'
:
decimal cellValue;
// Check if conversion possible
if (Decimal.TryParse(dataGridView1.Rows[0].Cells[1].Value, out cellValue))
{
MyCommand.Parameters["@value1"].Value = cellValue;
}
else
{
/*Whatever you want to do in a fail case*/
}
这更安全,因为您总是会发现转换问题。
第三:
更改DataGridView
的列类型:https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.valuetype%28v=vs.110%29.aspx这应该为您避免很多问题。