代码报错‘输入字符串格式不正确’,请排查问题并提供解决方案
问题排查与修复方案
首先,你遇到的「输入字符串格式不正确」错误,核心原因有两个,同时代码还存在严重的安全隐患,我来逐一拆解:
1. 类型转换逻辑错误
你要把文本框内容转成decimal类型,但却用了Int64.Parse()——这个方法只能解析纯整数格式的字符串。如果textBox10里输入的是带小数的金额(比如123.45)、空值、或者非数字字符,就会直接抛出格式错误异常。
正确的做法是用decimal.TryParse()来安全转换,它不会直接抛出异常,还能帮你判断转换是否成功:
string tot = textBox10.Text; decimal itot; // 尝试转换,失败时会返回false if (!decimal.TryParse(tot, out itot)) { MessageBox.Show("请输入有效的数字格式金额"); return; // 转换失败就终止后续操作 }
2. 存在SQL注入风险
你直接把变量拼接到SQL语句里,这是非常危险的做法,恶意用户可以通过输入特殊字符篡改你的SQL逻辑,甚至删除整个数据库。必须使用参数化查询来避免这个问题:
// 用参数占位符代替直接拼接变量 string qry = "insert into sale (total) values (@Total)"; SqlCommand sc = new SqlCommand(qry, con); // 添加参数并指定类型,确保安全 sc.Parameters.Add("@Total", SqlDbType.Decimal).Value = itot; try { int i = sc.ExecuteNonQuery(); if (i >= 1) MessageBox.Show("Inserted successfully"); else MessageBox.Show("Not done"); } catch (Exception ex) { // 捕获其他可能的异常,比如数据库连接问题 MessageBox.Show($"操作失败:{ex.Message}"); } finally { // 记得关闭数据库连接(如果没有用using的话) if (con.State == ConnectionState.Open) con.Close(); }
额外建议
- 可以给
textBox10添加输入验证,比如只允许输入数字和小数点,从源头避免格式错误。 - 数据库操作最好用
using语句自动释放资源,比如:
using (SqlCommand sc = new SqlCommand(qry, con)) { // 参数设置和执行逻辑 }
内容的提问来源于stack exchange,提问作者Pravee
相关产品推荐
相关产品推荐

