7

我正在尝试使用 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)

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

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

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

有任何想法吗?

4

3 回答 3

4

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

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

希望能帮助到你。

于 2013-08-27T13:01:00.133 回答
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
于 2013-09-03T12:18:17.667 回答
1

根据 microsoft 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 之外。为确保完整安装 Integration Services,您必须在“功能选择”页面上选择 Integration Services。”

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

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

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

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

"

于 2013-10-17T07:34:41.330 回答