在.NET中覆盖SSIS配置连接字符串

时间:2013-10-22 11:11:46

标签: .net sql-server ssis ssis-2008

我正在编写一个应用程序,以编程方式将用户选择的平面文件导入数据库(使用其他逻辑,所以我真的必须使用SSIS)。我有一个表中的SSIS包列表,并加载包并在代码中执行它。但是,我的SSIS包使用设计时参数在另一个数据库服务器(在本例中为QA)而不是运行时配置参数中查找其配置。

如何覆盖连接字符串以使用我在代码中提供的连接字符串?

以下是我正在使用的来源的示例

Dim app As New Microsoft.SqlServer.Dts.Runtime.Application
Dim pkg As Microsoft.SqlServer.Dts.Runtime.Package = New Microsoft.SqlServer.Dts.Runtime.Package()

pkg = app.LoadFromSqlServer(packageName, serverName, Nothing, Nothing, Nothing)

pkg(0).ConfigurationType = DTSConfigurationType.ISqlServer


Dim result = pkg.Execute

2 个答案:

答案 0 :(得分:2)

查看DTLoggedExec的源代码。

在Program.cs文件中有一些设置属性值的代码,您可以在程序中使用它。

DtsProperty p;
Variable pkgObj;
pkgObj = (Variable)package.GetObjectFromPackagePath(valuePath, out p);                                        

if (p != null && pkgObj != null)
{
Console.WriteLine(" (Parameter Type: " + pkgObj.DataType + ")");
p.SetValue(pkgObj, Convert.ChangeType(s[1], pkgObj.DataType));
}

valuePath是对象的路径,而1是您要放入该属性的值。对于连接管理器,它通常类似于:

\Package.Connections[CONNMGRNAME].Properties[ConnectionString]

答案 1 :(得分:1)

您的包对象应该公开Connections属性/ ConnectionManager个对象的集合。您可以迭代此集合以查找要修改的CM。然后将其ConnectionString属性设置为任何正确的值。