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

SSIS脚本组件无法识别Dts.Variables命名空间求助

解决Dts.Variables无法识别的问题

针对你在SSIS脚本任务中遇到的Dts.Variables无法识别的问题,按以下步骤排查解决:

  • 确认脚本任务基类正确
    你的脚本类必须继承自Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase,默认新建的脚本任务会自动生成这个基类,若手动修改过类定义,改回即可:

    public class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {
        // 你的代码逻辑
    }
    
  • 添加必要的程序集引用
    在脚本编辑器的「解决方案资源管理器」里,右键点击「引用」→「添加引用」,找到并添加以下两个程序集:

    • Microsoft.SqlServer.ManagedDTS
    • Microsoft.SqlServer.ScriptTask
  • 导入正确的命名空间
    在代码顶部添加命名空间,确保能识别Dts相关对象:

    using Microsoft.SqlServer.Dts.Runtime;
    using System.Data;
    using System.Data.OleDb;
    
  • 配置变量访问权限
    回到SSIS设计器,选中脚本任务右键→「编辑」,在「脚本」选项卡的ReadOnlyVariables或ReadWriteVariables中添加User::CRMDataSet,否则即使识别到Dts,访问变量时也会抛出权限异常。

  • 区分脚本任务与脚本组件
    如果你是在数据流任务的脚本组件中写代码,Dts对象本身不存在,需通过Variables属性直接访问变量,比如Variables.CRMDataSet,注意不要混淆两种组件的用法。

修正后的完整代码示例:

using System;
using System.Data;
using System.Data.OleDb;
using Microsoft.SqlServer.Dts.Runtime;

public class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
    public override void PreExecute()
    {
        base.PreExecute();

        DataTable dt = new DataTable();
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.Fill(dt, Dts.Variables["User::CRMDataSet"].Value);

        foreach (DataRow row in dt.Rows)
        {
            // 这里编写你的业务逻辑
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:30:43