如何将字符串参数h转为整数以完成Conviction表的SQL更新?
解决SQL整数参数转换问题
你的代码存在两个关键问题,导致Serial_no整数参数无法正确匹配:
- 为@h参数赋值时错误传入了
SqlDbType.Int枚举,而非实际的整数值 - 传入的参数h是string类型,未转换为对应的整数类型
修正方案:
1. 安全转换字符串到整数(推荐)
在方法内部先对string类型的h做安全转换,避免非法格式引发报错:
void UPDATEConviction(string a, string b, string c, string d, string e, string f, string g, string h) { if (!int.TryParse(h, out int serialNo)) { MessageBox.Show("Serial_no格式错误,请输入有效整数"); return; } using (SqlConnection conn = getc()) { SqlCommand cmd = new SqlCommand("update Conviction set Date_Convicted =@a, Court_File=@b, Police_File=@c, Station=@d,Offence=@e,Sentence=@f,Convict_Status=@g Where Serial_no = @h", conn); cmd.Parameters.AddWithValue("@a", a); cmd.Parameters.AddWithValue("@b", b); cmd.Parameters.AddWithValue("@c", c); cmd.Parameters.AddWithValue("@d", d); cmd.Parameters.AddWithValue("@e", e); cmd.Parameters.AddWithValue("@f", f); cmd.Parameters.AddWithValue("@g", g); // 传入转换后的整数值 cmd.Parameters.AddWithValue("@h", serialNo); conn.Open(); cmd.ExecuteNonQuery(); dataGridView3.DataSource = GetConvictoin(); } }
2. 明确指定参数类型(可选)
如果能确保h是合法整数,可直接转换并明确参数类型,避免隐式转换问题:
// 替换原@h参数赋值代码 cmd.Parameters.Add("@h", SqlDbType.Int).Value = int.Parse(h);
3. 优化数据源取值逻辑
从DataGridView获取Serial_no时直接取整数类型,减少后续转换步骤:
// 直接获取整数 int serialNo = (int)this.dataGridView3.CurrentRow.Cells[0].Value; convictions.label2.Text = serialNo.ToString(); // 调用方法时直接传int类型,同时修改方法参数为int h UPDATEConviction(a, b, c, d, e, f, g, serialNo); // 修改方法定义:void UPDATEConviction(string a, string b, string c, string d, string e, string f, string g, int h)
内容的提问来源于stack exchange,提问作者sakiasi baleiwai komai
相关产品推荐
相关产品推荐

