【问题标题】:Trouble running SSIS package programmatically and from command line (DTEXEC) [duplicate]以编程方式和从命令行(DTEXEC)运行 SSIS 包时遇到问题 [重复]
【发布时间】:2013-07-16 13:26:15
【问题描述】:

我正在尝试使用 C# 以编程方式执行 SSIS 包。

Application app = new Application();
Package package = app.LoadPackage(pkgFullPath, null);
package.Execute();

我收到一条错误消息:

Error in Microsoft.SqlServer.Dts.Runtime.TaskHost/SSIS.Pipeline : To run a SSIS package outside of SQL Server Data Tools you must install Conditional Split of Integration Services or higher.

Error in Microsoft.SqlServer.Dts.Runtime.TaskHost/SSIS.Pipeline : To run a SSIS package outside of SQL Server Data Tools you must install Lookup of Integration Services or higher.

我在 Visual Studio 2010 中使用 SSIS,但在 VS 2012 中执行 nunit 测试中的 C# 代码(运行 .Net 4.0)

如果我在 VS 2010 的 SSIS 项目中使用调试启动它(按 F5),该程序包运行良好,但如果我尝试从命令行使用 dtexec 运行它,它会失败并出现相同的错误(在 32和 dtexec 的 64 位版本)。如果我使用 ctrl + F5(不调试)从 Visual Studio 内部启动它,它也会失败并出现相同的错误

我在网上找到了一些文章,表明它与 64 位和 32 位问题有关,但是在运行两个版本的 dtexec 时我看到了同样的错误。我使用的是 11.0.2100.60 版本的 dtexec,它与 VS 2010 中的 SQL Server Integration Services Designer 的版本相匹配。

如果我运行一个没有条件拆分和查找的简单包,我不会收到错误消息。我是否必须安装一些额外的东西才能在 Visual Studio 之外运行它?

有什么想法吗?

【问题讨论】:

  • 您确定集成服务安装正确吗? BIDS 和 SSDT 将能够执行包。如果要使用 dtexec 或以编程方式运行它,则必须安装集成服务。检查系统上运行的服务。与您的方案一样,“SQL Server 集成服务”要么不存在,要么处于 STOPPED 模式。
  • 包属性中,有没有试过调整Run64BitRuntime属性? reference
  • 谢谢大家。我希望其中一些想法可能对其他有类似问题的人有所帮助。然而,我的项目最终走向了不同的方向,所以我不再设置环境来尝试新的解决方案。

标签: c# sql-server ssis


【解决方案1】:

继续我上面的评论,如果服务安装正确,那么可能是关于执行包的帐户的权限(我看到您使用的是 SQL 2012)的问题。

参考http://technet.microsoft.com/en-us/library/hh213130.aspx

希望对你有帮助。

【讨论】:

    【解决方案2】:

    这是 VB 代码,但可以很容易地转换为 C#。 尝试运行执行 SSIS 包的 SQL 命令。

    类似:

    Try
        'Job implementation goes here
        Dim jobConnection As System.Data.SqlClient.SqlConnection
        Dim jobCommand As SqlCommand
        Dim jobParameter As SqlParameter
        Dim jobReturnValue As SqlParameter
        Dim jobResult As Integer
    
    
        jobConnection = New System.Data.SqlClient.SqlConnection(SSISConnectionString)
        jobCommand = New SqlCommand("msdb.dbo.sp_start_job", jobConnection)
        jobCommand.CommandType = CommandType.StoredProcedure
    
        jobReturnValue = New SqlParameter("@RETURN_VALUE", SqlDbType.Int)
        jobReturnValue.Direction = ParameterDirection.ReturnValue
        jobCommand.Parameters.Add(jobReturnValue)
    
    
        jobParameter = New SqlParameter("@job_name", SqlDbType.VarChar)
        jobParameter.Direction = ParameterDirection.Input
        jobCommand.Parameters.Add(jobParameter)
        jobParameter.Value = packageName
    
        jobConnection.Open()
        jobCommand.ExecuteNonQuery()
        jobResult = DirectCast(jobCommand.Parameters("@RETURN_VALUE").Value, Integer)
    
        jobConnection.Close()
    
    
        Select Case jobResult
            Case 0
                'Successful run
            Case Else
                Throw New Exception("SQLAgent Job failed to start!")
        End Select
    
    
    Catch ex As Exception
        Return ex
    End Try
    

    【讨论】:

      【解决方案3】:

      根据微软Install Integration Services网页:

      “您可以在安装向导的“功能选择”页面上选择安装的某些 SQL Server 组件安装了 Integration Services 组件的部分子集。这些组件对特定任务很有用,但 Integration Services 的功能将受到限制。例如,Database Engine Services 选项安装 SQL Server 导入和导出向导所需的 Integration Services 组件。SQL Server Data Tools 选项安装设计包所需的 Integration Services 组件,但未安装 Integration Services 服务,您无法在 SQL Server Data Tools 之外运行包。为确保集成服务的完整安装,您必须在功能选择页面上选择集成服务。"

      这就是为什么您可以从 Microsoft 工具中运行 SSIS 包,但不能从这些工具之外运行。奇怪的是,它只落在某些类型的组件上。

      如果您按照他们在该页面上的建议来完整安装集成服务组件,这应该可以解决问题。

      “要完整安装集成服务以及用于开发和管理包的工具和文档,请同时选择集成服务和以下共享功能:

      • SQL Server Data Tools 安装用于设计包的工具。
      • 管理工具 - 完成安装 SQL Server Management Studio 用于管理包。
        • 用于安装托管程序集的客户端工具 SDK 用于集成服务编程。

      "

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多