重写.NET中的SSIS配置连接字符串
我正在编写一个应用程序,通过编程将用户选择的平面文件导入数据库(使用其他逻辑,因此我必须使用SSI)。我将SSIS包的列表放在一个表中,然后加载包并以代码形式执行它。但是,我的SSIS包使用设计时参数在另一个数据库服务器(本例中为QA)中查找其配置,而不是运行时配置参数 如何重写连接字符串以使用我将在代码中提供的连接字符串 这是我正在使用的源代码的一个示例重写.NET中的SSIS配置连接字符串,.net,sql-server,ssis,ssis-2008,.net,Sql Server,Ssis,Ssis 2008,我正在编写一个应用程序,通过编程将用户选择的平面文件导入数据库(使用其他逻辑,因此我必须使用SSI)。我将SSIS包的列表放在一个表中,然后加载包并以代码形式执行它。但是,我的SSIS包使用设计时参数在另一个数据库服务器(本例中为QA)中查找其配置,而不是运行时配置参数 如何重写连接字符串以使用我将在代码中提供的连接字符串 这是我正在使用的源代码的一个示例 Dim app As New Microsoft.SqlServer.Dts.Runtime.Application Dim pkg As
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
请看一下的源代码 在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是要放入该属性的值。对于连接管理器,它通常类似于:
\Package.Connections[CONNMGRNAME].Properties[ConnectionString]
包对象应公开对象的连接属性/集合。您可以迭代此集合以查找要修改的CM。之后,只需将其属性设置为任何正确的值。我相信即使设置了设计时间参数,这也会起作用。如果稍后由表达式设置conn字符串,则仍可能出现问题。在这种情况下,您可以使用类似的代码更改表达式的值。非常感谢。根据您的建议,我最终成功地覆盖了参数。哦,请记住,只有在对包对象运行Execute之前,才能从代码中更改此值(与任何其他值一样)。@NWest所说的仍然适用:如果您在这个特定的ConnestionManager.ConnectionString上设置了一个包内表达式,那么它的计算值将优先于您从代码中设置的值。谢谢White_Raven。这就是我一直在处理的问题,我在代码中设置的参数值被设计时值覆盖。