我正在尝试使用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外部运行?
有什么想法吗?
答案 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和以下共享功能:
“