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

通过数据库上下文向SQL Server存储过程传递空DataTable报错如何解决

问题根因

你遇到的报错是ADO.NET和SQL Server对表值参数的固定限制导致的:

  • 自定义表类型作为参数传递时,哪怕没有数据,也必须携带和类型定义完全匹配的列结构,不能是无列的空DataTable
  • 表值参数不支持null或DBNull.Value作为入参,有效值只能是符合结构要求的DataTable、DataReader或实现了IEnumerable的对象

解决方法

1. 修复GetTypes方法,统一保留表结构

无论传入的typeList是否为空,都先创建和[brs].StringListType完全匹配的列结构,空场景下直接返回0行的结构化DataTable即可:

private DataTable GetTypes(List<string> typeList)
{
    // 提前创建和自定义表类型结构一致的DataTable
    var typeTable = new DataTable();
    typeTable.Columns.Add("Type", typeof(string));

    // 仅当有有效数据时添加行
    if (typeList != null && typeList.Count > 0)
    {
        foreach (var typeStr in typeList)
        {
            typeTable.Rows.Add(typeStr);
        }
    }

    return typeTable;
}

2. 补充存储过程入参

你提到存储过程共接收6个参数,当前代码仅传递了@rt_AppList,请补充剩余5个参数的赋值和传递逻辑,否则执行时会触发参数不匹配的报错。

3. 可选:存储过程适配空表逻辑

如果需要在表值参数为空时走特殊业务逻辑,可以在存储过程中判断行数即可:

IF (SELECT COUNT(1) FROM @rt_AppList) = 0
BEGIN
    -- 空表对应逻辑
END
ELSE
BEGIN
    -- 有数据对应逻辑
END

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:42:03