我正在编写一个应用程序,以编程方式将用户选择的平面文件导入数据库(使用其他逻辑,所以我真的必须使用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
答案 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属性设置为任何正确的值。