ation\Tasks\A39847F3-5845-4459-A25E-DE73A8E3CD48
最后,自定义的任务像dual_interface COM组件一样被开放。您从所有的类的public,非静态的字段,属性和方法创建一个默认的接口。在下面的一行代码在自定义任务源文件中USING应用之后:
[assembly:ClassInterface(ClassInterfaceType.AutoDual)]
这部分的代码已经完全列举了。
增加功能性的自定义任务
本文“编译、注册和安装自定义任务”部分包含一个简单的DTS自定义任务代码。 任务有两个属性:Name 和Description,Description属性的值就会出现在消息框中。这个例子的描述了一个最小化的代码你可以使用已有的功能性的DTS定义任务。然而,你可以通过执行CustomTaskUI接口创建一个用户界面,但是那并不作讨论。通过只执行自定义的接口,DTS设计者为自定义任务创建一个默认的有户界面。
所有的DTS自定义任务执行自定义任务接口。自定义的用户接口是由两个属性,一个集合和一个方法:
1、 Name和Description属性;
2、 Properties集;
3、 Execute方法。
所有的自定义任务应该执行属性、属性集和Execute方法。
编译、注册和安装自定义任务
using System;
using System.Runtime.InteropServices;
using Microsoft.SQLServer.DTSPkg80;
using Microsoft.Win32;
using System.Windows.Forms;
[assembly:ClassInterface(ClassInterfaceType.AutoDual)]
namespace DTS
{
[Guid("38ED4F80-9EF4-4752-8478-65D2DB3BA7DD"), ComVisible(true)] //GUID is created by using GUIDGEN.EXE
[ProgId("DTS.SimpleCustomTask")]
public class SimpleCustomTask : CustomTask
{
private string name;
private string description;
public SimpleCustomTask()
{
name = "";
description = "SimpleCustomTask description";
}
public void Execute(object pPackage, object pPackageEvents, object pPackageLog, ref Microsoft.SQLServer.DTSPkg80.DTSTaskExecResult pTaskResult)
{
//Assume failure at the outset
pTaskResult= DTSTaskExecResult.DTSTaskExecResult_Failure;
try
{
Package2 package = (Package2) pPackage;
PackageEvents packageEvents = (PackageEvents) pPackageEvents;
PackageLog packageLog = (PackageLog) pPackageLog;
MessageBox.Show(description);
}
//First catch COM exceptions, and then all other exceptions
catch(System.Runtime.InteropServices.COMException e)
{
Console.WriteLine(e);
}
catch(System.Exception e)
{
Console.WriteLine(e);
}
//Return success
pTaskResult = DTSTaskExecResult.DTSTaskExecResult_Success;
}
public string Description
{
get { return this.description; }
set { this.description = value; }
}
public string Name
{
get { return name; }
set { this.name = value; }
}
public Microsoft.SQLServer.DTSPkg80.Properties Properties
{
get { return null; }
}
[System.Runtime.InteropServices.ComVisible(false)]
override public string ToString()
{
return base.ToString();
}
//Registration function for custom task.
[System.Runtime.InteropServices.ComRegisterFunctionAttribute()]
static void RegisterServer(Type t)
{
try
{
const string TASK_CACHE = "Software\\Microsof