2016-12-14 94 views
1

我想在调用它时将一些变量传入我的SSIS包中,但似乎无法获得正确的语法。将变量传递给SSIS包C#

Microsoft.SqlServer.Dts.Runtime.Wrapper.Application app = new Microsoft.SqlServer.Dts.Runtime.Wrapper.Application(); 

Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSPackage100 pkg = app.LoadPackage(pkgLocation, false, null); 

所以上面位工作,但是当我去添加一个变量它不工作:

pkg.Variables["mode"].Value = "test"; 

我得到的错误:

'IDTSPackage100' does not contain a definition for 'Variables' and no extension method 'Variables' accepting a first argument of type 'IDTSPackage100' could be found (are you missing a using directive or an assembly reference?)' 
+0

如果我没记错,你需要,例如做这样的事情,这是我怎么会得到'sourcePath'在我当前的SSIS包中,我正在使用'string sourcePath = Dts.Variables [“User :: sourcePath”]。Value.ToString();' – MethodMan

回答

2

奔,

你使用包装程序集的任何原因? IDTSPackage100接口不包含Variables属性。但Microsoft.SqlServer.Dts.Runtime命名空间中的Package类包含Variables属性。

因此,请使用Microsoft.SqlServer.Dts.Runtime命名空间(在Microsoft.SqlServer.ManagedDTS程序集中找到)中的应用程序和程序包类代替包装程序命名空间/程序集,并且应该可以访问Variables属性。

更新: 如果你仍然想使用包装命名空间,你可以投的IDTSPackage100对象到IDTSContainer100对象,然后从那里访问的变量。

IDTSContainer100 container = (IDTSContainer100)pkg; 
container.Variables["User::mode"].Value = "test"; 

更新2: 然后Execute method呼叫是这样的:

pkg.Execute(null, container.Variables, null, null, null); 
+0

我需要使用IDTS作为我正在安装的服务器。 –

+0

没有完全理解你的评论。你是否说你不能添加对ManagedDTS程序集的引用?你无法找到DLL的位置,或者根本没有可用的DLL吗? –

+0

本...更新我的答案继续使用包装程序集。完成之后,我会建议尽可能使用ManagedDTS程序集。 –