个数据流组件

开发一,必须为组件实现运行时(IDTSRuntimeComponent90)和设计时(IDTSRuntimeComponent90)接口。运行时接口包含组件的元数据和组件执行方法,设计时接口包含用户在BIDS中编辑组件时的方法。 事实上,我们只要在继承PipelineComponent类,重写类方法就可有开发自己想要的组件了。 简单的范例 在VS中新建一个类库项目。然后在项目中引用四个程序集:

         1.     Microsoft.SqlServer.PipelineHost

         2.     Microsoft.SqlServer.DTSPipelineWrap

         3.     Microsoft.SQLServer.ManagedDTS

         4.     Microsoft.SqlServer.DTSRuntimeWrap 然后建立一个继承PipelineComponent的类:

其中DtsPipelineComponent语句后是DtsPipelineComponentAttribute类中属性,定义了组件名称、类型、图标、是否可用高级编辑器、编辑界面等。关于自定义编辑界面,后面会专门讨论。

然后为程序集建立签名。 安装组件 按F5调试后,在项目的bin/debug/文件夹下找到编译的库文件,我这里编译的库文件是DataFlowComponent_1.dll,将库文件复制到<SQL Server实例安装路径>/90/DTS/PipelineComponents/下。然后在GAC中安装程序集,可以直接将库文件拖入<系统盘符>/windows/assemble,或者在命令行中输入gacutil /i "<项目文件夹>/bin/Debug/DataFlowComponent_1.dll" 在BIDS中新建一个SSIS包,这时在设计数据流工具箱中还看不到新开发的组件,右击工具箱,选“选择项”。 加入开发的组件 然后在数据流设计的工具箱中就可以发现这个组件,将组件加入到数据流,双击它,因为没有为组件设计编辑界面,所以默认打开的是高级编辑器。 尽管这个组件在数据流中可以执行,但它什么工作都不着,因为我们还没有定义它执行时的工作。 在开发过程中常常需要在BIDS中测试新版本,每次都要将库文件复制到SQL文件夹,再在GAC中安装是件非常麻烦的事。 可以在项目的生成事件中让编译成功后自动安装组件。选"编译" —— "生成事件..." —— "编译生成后事件" 假定你的系统和sql都装在C:下的默认路径,在编译后事件文本框中输入: "C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin/gacutil.exe" -u DataFlowComponent_1.dll copy DataFlowComponent_1.dll "C:/Program Files/Microsoft SQL Server/90/DTS/PipelineComponents/DataFlowComponent_1.dll" "C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin/gacutil.exe" -i "C:/Program Files/Microsoft SQL Server/90/DTS/PipelineComponents/DataFlowComponent_1.dll" 这样在每次编译后,程序集会自动安装。 但如果你开启了两个VS 2005,一个在写数据流组件代码,一个用于设计数据流;希望在代码编译后马上能在数据流设计器中试用,那首先每次编译都要有一个更高版本的程序集。 例如上次编译的是1.0.0.0版本,那么再修改代码后再次编译就要使用1.0.0.1,编译完成后还要在数据流设计界面的工具箱中删除组件,然后再加入。 测试“设计时” 通常的开发状况是开启了两个VS实例,一个用于编写组件代码,暂且将它叫做VS_A;一个在数据流设计界面中测试组件,将它叫做VS_B。 在VS_A中的菜单栏中,选“调试” —— “附加到进程...”

 

将VS_B加入 然后在VS_B中加入组件,可以在VS_A设置断点,组件的所有事件和变量都可以在VS_A中捕获到。 测试“运行时” 假设我们要在数据流中测试“Ado Source VB”组件(这个组件是SQL Server 2005自带的Sample),在VS_B的数据流中加入一个脚本组件,脚本组件的代码如下: Public Class ScriptMain     Inherits UserComponent

    Public Overrides Sub 输入0_ProcessInputRow(ByVal Row As 输入0Buffer)         '         ' Add your code here         '     End Sub

    Public Overrides Sub PreExecute()         MsgBox("Begin Debug")         MyBase.PreExecute()     End Sub

End Class 这个脚本组件的目的是让数据执行时出现一个Msgbox,以中断数据流。 在MsgBox出现后,将VS_A加入到DtsDebugHost.exe中 设置组件执行时断点,然后继续数据流…… 由于最近工作繁忙,关于SSIS数据流组件的开发我暂时不打算继续写下去,抱歉。 SSIS组件对非OLE DB连接的兼容性不是很好,而且在SQL Server 2008 CTP3中还看到对Excel 07文件的支持。 自己动手开发是难免的,微软已提供了很多的Sample,感兴趣的话可以到官方网站下载,重新修改修改就OK。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值