以编程方式和从命令行(DTEXEC)运行SSIS包时出现问题

本文关键字:运行 SSIS 包时出 问题 DTEXEC 方式 编程 命令行 | 更新日期: 2023-09-27 18:22:50

我正试图使用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(运行.Net 4.0)中执行nunit测试中的C#代码

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

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

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

有什么想法吗?

以编程方式和从命令行(DTEXEC)运行SSIS包时出现问题

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

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

希望能有所帮助。

这是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

根据微软安装集成服务网页:

"您可以在安装向导的"功能选择"页上选择要安装的某些SQL Server组件安装Integration Services组件的部分子集。这些组件对特定任务很有用,但Integration Services的功能将受到限制。例如,"数据库引擎服务"选项安装S所需的Integration Services组件SQL Server导入和导出向导。"SQL Server数据工具"选项安装了设计包所需的Integration Services组件,但没有安装Integration Services服务,并且您不能在SQL Server Data Tools之外运行包。若要确保Integration Services的完整安装,必须在"功能选择"页面上选择"Integration Services"。"

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

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

"要完整安装Integration Services,以及开发和管理包的工具和文档,请选择Integration Services和以下共享功能:

  • SQL Server数据工具,用于安装用于设计包的工具
  • 管理工具-完成以安装SQL Server Management Studio用于管理包。
    • 用于安装托管程序集的客户端工具SDK用于Integration Services编程

"