本文描述了如何利用Visual C#net 创建一个DTS 自定义的任务你可以通过C#net创建自定义的任务的方式扩展DTS的功能之后你可以安装并注册任务将它出现在DTS设计其中就像默认的DTS任务总之你能够使用NET Framework创建自定义的任务
在本文中除了讲创建一个DTS自定义任务外还包括一下部分内容
这篇文章中自定义的代码分为编译注册和安装自定义任务
这部分一个有特色的部分就是你可以运行自定义的任务
在开发过程中你可以使用本文提及的一些工具(除非另有说明这些工具已经包含在NET中了您可以通过NET的命令行运行这些工具)
为DTSSpkgdll创建一个及时的包
如果一个基于微软NET客户机访问一个COM组件你必须使用一个包(这个组件包含的)这类的包是及时的运行包(RCW)并且你也可以通过开放Dtspkgdll的类型库编译你也可以使用类型库导出工具(Tlbimpexe)编译RCW如
tlbimpexe C:\ProgramFiles\Microsoft SQLServer\\tools\Binn\dtspkgdll/out:MicrosoftSQLServverDTSPKGdll/keyfile:DTSPkgsnk /keyfile
参数代表MicrosoftSQLServerDTSPkgdll带有强类型名用public或private关键字使用强类型名工具(snexe)在DTSPkgsnk 前创建关键字snexe –k DTSPkgsnk
你应该使用一个强类型名像其他的全局集合缓存因为你安装了运行包
在全局集合缓存中安装运行包
用全局集合缓存工具(GaCutilexe)安装运行包
gacutilexe /I MicrosoftSQLServerDTSPkgdll
安装了运行包后你可以像添加NETC#工程中的引用一样的添加
为自定义的任务添加代码
代码的自定义注册NET没有开放DllReginsterServer 和DllUnregisterServer 像COM组件的入口但是你可以使用ComRegisterFunctionAttribute 类执行任务注册和撤销注册在自定义类声明之前添加下面代码
[Guid(AFAEDEAECD) ComVisible(true)]
[ProgId(DTSSimpleTask)]
public class SimpleTask : CustomTask
{
//implementation of custom task
}
下面的代码是一个函数注册的范例执行函数的全部代码在自定义任务的编译注册和安装部分
[SystemRuntimeInteropServicesComRegisterFunctionAttribute()]
static void RegisterServer(Type t)
{
//code to register custom task
}
注册函数增加下面的键值用来注册
HKEY_CLASSES_ROOT\CLSID\AFAEDEAECD\Implemented Categories\{EBCCFAEEAAAD}
EBCCFAEEAAAD是DTS包对象的类编号因为所有的自定义的任务执行自定义的接口所以必须注册注册函数添加下面的注册键值
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\\DTS\Enumeration\Tasks\AFAEDEAECD
下面的DTS任务缓存目录列表使自定义的任务出现在DTS设计器中
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\\DTS\Enumeration\Tasks\
下面的代码示范非注册函数的任务移出的执行面注册函数是ComUnregisterFunctionAttribute类在NET运行库的一部分想浏览这个函数的完整代码你可以看编译注册和安装自定义任务部分
[SystemRuntimeInteropServicesComUnregisterFunctionAttribute()]
static void UnregisterServer(Type t)
{
//code to unregister custom task
}
免注册函数通过从注册表中删除下面键值从DTS任务缓存中移出任务
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\\DTS\Enumeration\Tasks\AFAEDEAECD
最后自定义的任务像dual_interface COM组件一样被开放您从所有的类的public非静态的字段属性和方法创建一个默认的接口在下面的一行代码在自定义任务源文件中USING应用之后
[assembly:ClassInterface(ClassInterfaceTypeAutoDual)]
这部分的代码已经完全列举了
增加功能性的自定义任务
本文编译注册和安装自定义任务部分包含一个简单的DTS自定义任务代码 任务有两个属性Name 和DescriptionDescription属性的值就会出现在消息框中这个例子的描述了一个最小化的代码你可以使用已有的功能性的DTS定义任务然而你可以通过执行CustomTaskUI接口创建一个用户界面但是那并不作讨论通过只执行自定义的接口DTS设计者为自定义任务创建一个默认的有户界面
所有的DTS自定义任务执行自定义任务接口自定义的用户接口是由两个属性一个集合和一个方法
Name和Description属性
Properties集
Execute方法
所有的自定义任务应该执行属性属性集和Execute方法