SQL Insert语句无报错无异常但数据库未插入数据该如何排查
核心问题原因
最主要的原因是代码中异步方法未正确等待,导致数据库操作还没执行完成,资源就被提前释放,且异常无法被捕获:
- 异步操作无
await关键字:conn.OpenAsync()、action.ExecuteNonQueryAsync()都是异步方法,直接调用仅返回未完成的Task对象,不会等待操作执行完成。后续using块会立刻销毁SqlConnection连接,插入命令还没发送到数据库就被终止。 - 异常无法捕获:未被await的Task抛出的异常会被封装在Task上下文内,不会触发当前的try-catch逻辑,所以看不到任何错误提示。
其他可能的触发原因
- 参数长度不匹配:代码中
@logo参数定义的长度为225,但表结构中CompanyLogo字段长度是255,如果传入的logo内容长度超过225,会被截断或直接触发插入失败,异常同样因为无await无法捕获。 - 非空字段传入空值:表中所有字段都是NOT NULL约束,如果传入的company_ID、logo等任一参数为null/空字符串,会触发插入失败,错误被Task吞没。
- 主键冲突:如果传入的
Comp_ID已经在表中存在,会触发主键唯一约束报错,同样无法被当前catch捕获。 - 连接字符串指向错误:连接字符串配置的是测试库/本地库,核查数据时访问的是另一个数据库,误以为插入失败。
- 未校验插入结果:代码没有判断
ExecuteNonQuery的返回值(返回受影响行数,插入成功应该等于1),哪怕插入失败也会弹出成功提示,造成无报错的假象。
修复后的参考代码
private async Task Adding_Com(string company_ID, string company_Name, string address, string website, string contact_No, string logo) { string Query = "INSERT INTO Company (Comp_ID, CompanyLogo, Comp_TelNum, Comp_Name, Comp_Address, Comp_Website) " + "VALUES (@ComId, @logo, @con, @ComName, @address, @site)"; // 移除无意义的Task.Run包装,异步方法本身不需要额外包线程 using (var conn = new SqlConnection(connString)) using (var action = new SqlCommand(Query, conn)) { // 修正logo参数长度和表结构一致 action.Parameters.Add("@ComId", SqlDbType.VarChar, 25).Value = company_ID; action.Parameters.Add("@logo", SqlDbType.VarChar, 255).Value = logo; action.Parameters.Add("@con", SqlDbType.VarChar, 45).Value = contact_No; action.Parameters.Add("@ComName", SqlDbType.VarChar, 55).Value = company_Name; action.Parameters.Add("@address", SqlDbType.VarChar, 55).Value = address; action.Parameters.Add("@site", SqlDbType.VarChar, 55).Value = website; try { // 异步方法加await等待执行完成 await conn.OpenAsync(); int affectedRows = await action.ExecuteNonQueryAsync(); if (affectedRows > 0) { MessageBox.Show("Company Has Been Registered"); } else { MessageBox.Show("插入失败,无数据被更新"); } } catch (SqlException ex) { MessageBox.Show(ex.Message); } catch (Exception ex) { // 捕获其他异常,比如空参数、连接错误等 MessageBox.Show($"操作出错:{ex.Message}"); } } }
内容的提问来源于stack exchange,提问作者PureWare -Legends Of Gaming
相关产品推荐
相关产品推荐

