2

我正在编写一个应用程序,它以编程方式将用户选择的平面文件导入数据库(使用其他逻辑,所以我真的必须使用 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
4

2 回答 2

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 是对象的路径, s 1是您要放入该属性的值。对于连接管理器,它通常是这样的:

\Package.Connections[CONNMGRNAME].Properties[ConnectionString]
于 2013-10-22T12:51:43.147 回答
1

您的包对象应公开 ConnectionManager 对象的 Connections 属性/集合。你可以迭代这个集合来找到你想要修改的CM。之后只需将其ConnectionString属性设置为任何正确的值。

于 2013-10-22T12:58:23.473 回答