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

ASP.Net C#使用SQL参数触发NullReferenceException错误如何解决

问题根因

你的代码存在两个核心问题导致报错和功能异常:

  1. 初始代码执行顺序错误触发空引用异常:
    你在仅执行SqlDataAdapter sda = new SqlDataAdapter()初始化后,没有给sda.SelectCommand属性赋值就直接访问sda.SelectCommand.Parameters,此时SelectCommand本身为null,自然触发空引用报错。而且你后续又重新给sda赋值了新的SqlDataAdapter实例,前面加的参数完全没有作用,整个执行逻辑是颠倒的。
  2. SQL参数用法不符合规则:
    SQL参数的设计本身只支持传递查询值,不能用来代替列名、表名等SQL结构部分,你原本想通过@I动态传入查询列名的写法本身就不被ADO.NET支持,就算解决了空引用问题也无法得到正确的查询结果。

正确实现方案

你后续新增switch语句硬编码匹配列名的思路是完全正确的,既避免了SQL注入风险,又符合动态查询的需求,只需要调整代码执行顺序、补充必要的逻辑即可,完整代码如下:

try
{
    // 1. 先生成动态查询SQL
    string qryselect = drpdSerType.SelectedValue?.ToString() ?? string.Empty;
    string cmdText = string.Empty;
    switch (qryselect)
    {
        case "Number":
            cmdText = "SELECT Number, Type, Qty, Date, RNum, ReceiptID FROM IssuedRN WHERE Number = @S";
            break;
        case "RNum":
            cmdText = "SELECT Number, Type, Qty, Date, RNum, ReceiptID FROM IssuedRN WHERE RNum = @S";
            break;
        case "ReceiptID":
            cmdText = "SELECT Number, Type, Qty, Date, RNum, ReceiptID FROM IssuedRN WHERE ReceiptID = @S";
            break;
        default:
            // 兜底逻辑,避免下拉框值异常导致报错
            throw new ArgumentException("无效的查询类型");
    }
    // 2. 初始化数据库连接和适配器,使用using自动释放资源
    using (SqlConnection con = new SqlConnection("Server=server1;Database=db1;Integrated Security=True"))
    using (SqlDataAdapter sda = new SqlDataAdapter(cmdText, con))
    {
        // 3. 给参数赋值
        sda.SelectCommand.Parameters.AddWithValue("@S", txtRNumSer.Text);
        // 4. 执行查询绑定
        DataTable dt = new DataTable();
        sda.Fill(dt);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
}
catch (Exception ex)
{
    // 按需添加异常处理逻辑
}

补充注意事项
  • 代码中新增了?.和空值判断,避免极端情况下下拉框值为空触发的空引用问题
  • 使用using块包裹数据库相关对象,执行完毕后会自动释放资源,不需要手动关闭连接,避免资源泄漏
  • switch的default分支可以根据你的业务需求调整,比如返回空数据或者提示用户查询类型错误

内容的提问来源于stack exchange,提问作者karl_009

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:54:00