如何在C#中更改SSI中的连接属性?

如何在C#中更改SSI中的连接属性?,c#,asp.net,asp.net-mvc,ssis,C#,Asp.net,Asp.net Mvc,Ssis,我有这个代码来执行一个包。这个包所做的只是将非常大的表数据导出到excel文件中 [HttpPost] public ActionResult TableToFile() { try { var connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SSIS"].ConnectionStr

我有这个代码来执行一个包。这个包所做的只是将非常大的表数据导出到excel文件中

    [HttpPost]
    public ActionResult TableToFile()
    {
        try
        {
            var connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SSIS"].ConnectionString);
            var integrationServices = new IntegrationServices(connection);

            var package = integrationServices
                .Catalogs["SSISDB"]
                .Folders["MyFolder"]
                .Projects["MyProject"]
                .Packages["MyPackage.dtsx"];

            long executionIdentifier = package.Execute(true, null);

            ExecutionOperation eo = integrationServices.Catalogs["SSISDB"].Executions[executionIdentifier];
            while (!eo.Completed)
            {
                eo.Refresh();
                System.Threading.Thread.Sleep(5000);
            }

            return Json(new { result = "ok" }, JsonRequestBehavior.AllowGet);
        }
        catch (Exception e)
        {
            return Json(new { result = "error" }, JsonRequestBehavior.AllowGet);
        }
    }
但是,该包具有硬编码连接,如sql server源文件和excel文件目标文件名。我们可以在包中的连接管理器中看到

我在VB.Net中有这段代码,它使用不同的库来设置包的连接

        Dim source As String = System.Windows.Forms.Application.StartupPath() & "\export.dtsx"
        Dim p As Microsoft.SqlServer.Dts.Runtime.Package = app.LoadPackage(source, Nothing)
        Dim exec As Executables = p.Executables

        For Each config As ConnectionManager In p.Connections
            Select Case config.Name
                Case "SourceConnectionOLEDB"
                    config.ConnectionString = "..... some connection string here"
                Case "DestinationConnectionFlatFile"
                    config.ConnectionString = file

                    Dim inner As Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerFlatFile90 = CType(config.InnerObject, Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerFlatFile90)

                    For i As Integer = 0 To inner.Columns.Count - 1
                        Dim innerColumn As Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerFlatFileColumn90 = inner.Columns(i)

                        If i < inner.Columns.Count - 1 Then
                            innerColumn.ColumnDelimiter = delimiter
                        Else
                            innerColumn.ColumnDelimiter = vbNewLine
                        End If
                    Next
            End Select
        Next

        For Each taskhost As TaskHost In exec
            taskhost.Execute(Nothing, Nothing, Nothing, Nothing, Nothing)
        Next
Dim source As String=System.Windows.Forms.Application.StartupPath()&“\export.dtsx”
Dim p为Microsoft.SqlServer.Dts.Runtime.Package=app.LoadPackage(源代码,无内容)
作为可执行文件的Dim exec=p.可执行文件
对于p.Connections中的每个配置作为ConnectionManager
选择Case config.Name
案例“SourceConnectionOLEDB”
config.ConnectionString=“……此处有一些连接字符串”
案例“DestinationConnectionFlatFile”
config.ConnectionString=文件
将内部设置为Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerFlatFile90=CType(config.InnerObject,Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerFlatFile90)
对于i,整数=0到inner.Columns.Count-1
将innerColumn设置为Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerFlatFileColumn90=inner.Columns(i)
如果i

我的问题是,在我像VB.Net那样在上面的C代码中执行包之前,如何更改连接字符串或某些设置?

既然您似乎正在使用SSIS目录,那么您也应该能够使用项目环境变量。基本上,您的包将引用这些变量,并且您将在执行之前设置这些值

关于这一点,目前有一个解释