You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:15:08