无法以编程方式从命令行(DTEXEC)运行SSIS包

时间:2013-07-17 20:02:37

标签: c# sql-server ssis

我正在尝试使用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中的相同故障)和64位版本的dtexec)。如果我使用ctrl + F5(没有调试)

从Visual Studio内部启动它也会失败并出现相同的错误

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

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

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

希望它有所帮助。

答案 1 :(得分: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

答案 2 :(得分:1)

根据微软Install Integration Services网页:

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

这就是为什么你可以从Microsoft工具中运行SSIS包,而不是从那些工具外部运行。奇怪的是,它只会落在某些类型的组件上。

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

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

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