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.ManagedDTSMicrosoft.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
相关产品推荐
相关产品推荐

