Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写.NET中的SSIS配置连接字符串_.net_Sql Server_Ssis_Ssis 2008 - Fatal编程技术网

重写.NET中的SSIS配置连接字符串

重写.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

我正在编写一个应用程序,通过编程将用户选择的平面文件导入数据库(使用其他逻辑,因此我必须使用SSI)。我将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

请看一下的源代码

在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。这就是我一直在处理的问题,我在代码中设置的参数值被设计时值覆盖。