加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 在PowerShell中组装SSIS包

发布时间:2020-12-12 06:34:00 所属栏目:MsSql教程 来源:网络整理
导读:我应该在前言中说我在OOP语言中使用脚本或编程的经验是有限的. 我正在研究一种使用PowerShell以编程方式创建和执行SSIS包的方法.不幸的是,PowerShell和SSIS可用的大部分资源都是用于从SSIS调用PS,而不是相反. 但是,我已经为VB / C#找到了许多用于创建SSIS包的
我应该在前言中说我在OOP语言中使用脚本或编程的经验是有限的.

我正在研究一种使用PowerShell以编程方式创建和执行SSIS包的方法.不幸的是,PowerShell和SSIS可用的大部分资源都是用于从SSIS调用PS,而不是相反.

但是,我已经为VB / C#找到了许多用于创建SSIS包的资源.

Example resource here.

我通过调用DTS / SSIS程序集成功地转换了大部分代码,但是现在在将TaskHost对象转换为主管道时失败了.

示例代码:

[Void][Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.ManagedDTS')
[Void][Reflection.Assembly]::LoadWithPartialName('Microsoft.Sqlserver.DTSPipelineWrap')

# Create the Package and application,set its generic attributes

$Package = New-Object Microsoft.SqlServer.Dts.Runtime.Package
$Package.CreatorName = $CreatorName

$App = New-Object Microsoft.SqlServer.Dts.Runtime.Application

# Set connection info for our package

$SourceConn = $package.Connections.Add("OLEDB")
$SourceConn.Name = "Source Connection"
$SourceConn.set_ConnectionString("Data Source=$SourceServer;Integrated Security=True")

$TargetConn = $package.Connections.Add("OLEDB")
$TargetConn.Name = "Target Connection"
$TargetConn.set_ConnectionString("Data Source=$TargetServer;Integrated Security=True")

# Build the tasks

# Data Flow Task - actually move the table

[Microsoft.SQLServer.DTS.Runtime.Executable]$XferTask = $Package.Executables.Add("STOCK:PipelineTask")

$XferTaskTH = [Microsoft.SqlServer.Dts.Runtime.TaskHost]$XferTask

$XferTaskTH.Name = "DataFlow"
$XferTaskTH.Description = "Dataflow Task Host"

$DataPipe = [Microsoft.SQLServer.DTS.pipeline.Wrapper.MainPipeClass]($XferTaskTH.InnerObject)

当我收到错误时,一切正常,直到最后一行:

Cannot convert the
“System.__ComObject” value of type
“System.__ComObject#{}” to
type
“Microsoft.SqlServer.Dts.Pipeline.Wrapper.MainPipeClass”

欢迎任何帮助或想法!

解决方法

Microsoft.SqlServer.DTSPipelineWrap大量使用COM实例.

这篇论坛帖子建议使用CreateWRapperOfType方法:
http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/0f493a31-fbf0-46ac-a6a5-8a10af8822cf/

你可以试试这个:

$DataPipe = [System.Runtime.InteropServices.Marshal]::CreateWrapperOfType($XferTaskTH.InnerObject,[Microsoft.SQLServer.DTS.pipeline.Wrapper.MainPipeClass])

不会出错并产生一个对象 – 我不确定是什么类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读