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

SSIS数据流C#脚本组件变量传值为null的问题排查

SSIS脚本组件调用API空引用异常修复方案

问题场景

在For Each循环的SSIS数据流中调用API时遇到空引用错误:

  • 流程步骤:
    1. 获取未地理编码的标识键列表
    2. 根据标识键执行SQL查询获取经纬度,传入User::LatLon变量
    3. 通过表达式拼接基础API URL、User::LatLon和API密钥,生成User::GeoApifyURL变量
  • 异常表现:表达式生成的URL在浏览器中可正常返回数据,但脚本组件报错:

    [ScriptMain] Error: Object reference not set to an instance of an object.

根因诊断

脚本代码存在变量作用域错误:

  • 类级别定义了私有变量url和filename,但在PreExecute方法内重新声明了同名局部变量(而非给类变量赋值),导致类变量始终未初始化。
  • 后续CreateNewOutputRows方法尝试使用未赋值的类变量,触发空引用异常。

修复步骤

错误代码示例(问题所在)

public class ScriptMain : UserComponent
{
    // 类级别变量
    private string url;
    private string filename;

    public override void PreExecute()
    {
        base.PreExecute();
        // 错误:重新声明局部变量,类变量未被赋值
        string url = Variables.GeoApifyURL;
        string filename = Variables.OutputFileName;
    }

    public override void CreateNewOutputRows()
    {
        // 使用未初始化的类变量url,触发空引用
        using (var client = new WebClient())
        {
            string response = client.DownloadString(url);
            // ...后续逻辑
        }
    }
}

修正后代码

移除PreExecute方法内的变量声明,直接给类级别变量赋值:

public class ScriptMain : UserComponent
{
    // 类级别变量
    private string url;
    private string filename;

    public override void PreExecute()
    {
        base.PreExecute();
        // 正确:直接给类变量赋值,无局部变量声明
        url = Variables.GeoApifyURL;
        filename = Variables.OutputFileName;
    }

    public override void CreateNewOutputRows()
    {
        using (var client = new WebClient())
        {
            string response = client.DownloadString(url);
            // ...后续逻辑
        }
    }
}

注意:PreExecute方法在组件运行时仅执行一次,类变量会在数据流每行处理时保留,该修正既解决空引用问题,也符合SSIS脚本组件的执行逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:24:58