六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

通過Visual C#.NET建一個DTS任務

[摘要]本文描述了如何利用Visual C#.net 創建一個DTS 自定義的任務。你可以通過C#.net創建自定義的任務的方式擴展DTS的功能。之后你可以安裝并注冊任務,他講出現在DTS設計其中,就像默認的DTS任務。總之,你能夠使用.NET Framework創建自定義的任務。  在本文中除了講創建一...
本文描述了如何利用Visual C#.net 創建一個DTS 自定義的任務。你可以通過C#.net創建自定義的任務的方式擴展DTS的功能。之后你可以安裝并注冊任務,他講出現在DTS設計其中,就像默認的DTS任務。總之,你能夠使用.NET Framework創建自定義的任務。

  在本文中除了講創建一個DTS自定義任務外,還包括一下部分內容:

  1、這篇文章中自定義的代碼分為編譯、注冊和安裝自定義任務;

   2、這部分一個有特色的部分就是你可以運行自定義的任務;

   3、在開發過程中你可以使用本文提及的一些工具(除非另有說明,這些工具已經包含在.NET中了,您可以通過.NET的命令行運行這些工具)。

   為DTSSpkg.dll創建一個及時的包

  如果一個基于微軟.NET客戶機訪問一個COM組件,你必須使用一個包(這個組件包含的)。這類的包是及時的運行包(RCW)并且你也可以通過開放Dtspkg.dll的類型庫編譯。你也可以使用類型庫導出工具(Tlbimp.exe)編譯RCW,如:

tlbimp.exe “C:\ProgramFiles\Microsoft SQLServer\80\tools\Binn\dtspkg.dll”/out:Microsoft.SQLServver.DTSPKG80.dll/keyfile:DTSPkg.snk

“/keyfile”參數代表Microsoft.SQLServer.DTSPkg80.dll帶有強類型名用public或private關鍵字。使用強類型名工具(sn.exe)在DTSPkg.snk 前創建關鍵字:

sn.exe –k DTSPkg.snk

  你應該使用一個強類型名像其他的全局集合緩存,因為你安裝了運行包。

  在全局集合緩存中安裝運行包

  用全局集合緩存工具(GaCutil.exe)安裝運行包:

gacutil.exe /I Microsoft.SQLServer.DTSPkg80.dll  

 安裝了運行包后,你可以像添加.NETC#工程中的引用一樣的添加。
  
  為自定義的任務添加代碼

  代碼的自定義注冊。.NET沒有開放DllReginsterServer 和DllUnregisterServer 像COM組件的入口,但是你可以使用ComRegisterFunctionAttribute 類執行任務注冊和撤銷注冊。在自定義類聲明之前添加下面代碼:

[Guid("A39847F3-5845-4459-A25E-DE73A8E3CD48"), ComVisible(true)]

[ProgId("DTS.SimpleTask")]

public class SimpleTask : CustomTask

{

//implementation of custom task

}

  下面的代碼是一個函數注冊的范例執行。函數的全部代碼在自定義任務的編譯、注冊和安裝部分 。

[System.Runtime.InteropServices.ComRegisterFunctionAttribute()]

static void RegisterServer(Type t)

{

//code to register custom task

}

  注冊函數增加下面的鍵值用來注冊。

HKEY_CLASSES_ROOT\CLSID\A39847F3-5845-4459-A25E-DE73A8E3CD48\Implemented Categories\{10020200-EB1C-11CF-AE6E-00AA004A34D5}

10020200-EB1C-11CF-AE6E-00AA004A34D5是DTS包對象的類編號。因為所有的自定義的任務執行自定義的接口所以必須注冊。注冊函數添加下面的注冊鍵值:

HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\80\DTS\Enumeration\Tasks\A39847F3-5845-4459-A25E-DE73A8E3CD48

  下面的DTS任務緩存目錄列表,使自定義的任務出現在DTS設計器中:

HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\80\DTS\Enumeration\Tasks\

  下面的代碼示范非注冊函數的任務移出的執行。面注冊函數是ComUnregisterFunctionAttribute類在.NET運行庫的一部分。想瀏覽這個函數的完整代碼,你可以看“編譯、注冊和安裝自定義任務”部分:

[System.Runtime.InteropServices.ComUnregisterFunctionAttribute()]

static void UnregisterServer(Type t)

{

//code to unregister custom task

}

  免注冊函數通過從注冊表中刪除下面鍵值從DTS任務緩存中移出任務

HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\80\DTS\Enumeration\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\\Microsoft\\Microsoft SQL Server\\80\\DTS\\Enumeration\\Tasks";
const string CATID_DTSCustomTask = "{10020200-EB1C-11CF-AE6E-00AA004A34D5}";
string guid = "{" + t.GUID.ToString() + "}";
guid = guid.ToUpper();
Console.WriteLine("RegisterServer {0}", guid);
RegistryKey root;
RegistryKey rk;
RegistryKey nrk;
// Add COM Category in HKEY_CLASSES_ROOT

root = Registry.ClassesRoot;
rk = root.OpenSubKey("CLSID\\" + guid + "\\Implemented Categories", true);
nrk = rk.CreateSubKey(CATID_DTSCustomTask);
nrk.Close();
rk.Close();
root.Close();
// Add to DTS Cache in HKEY_CURRENT_USER
root = Registry.CurrentUser;
rk = root.OpenSubKey(TASK_CACHE, true);
nrk = rk.CreateSubKey(guid);
nrk.SetValue("", t.FullName);
nrk.Close();
rk.Close();
root.Close();
SimpleCustomTask ct = new SimpleCustomTask();
  root = Registry.ClassesRoot;
rk = root.OpenSubKey("CLSID\\" + guid, true);
rk.SetValue("DTSTaskDescription", ct.description);
nrk.Close();
  rk.Close();
root.Close();
   }
   catch(Exception e)
   {
    System.Console.WriteLine(e.ToString());
   }
  }

 //Unregistration function for custom task.
 [System.Runtime.InteropServices.ComUnregisterFunctionAttribute()]
 static void UnregisterServer(Type t)
 {
  try
  {
const string TASK_CACHE = "Software\\Microsoft\\Microsoft SQL Server\\80\\DTS\\Enumeration\\Tasks";
string guid = "{" + t.GUID.ToString() + "}";
guid = guid.ToUpper();
Console.WriteLine("UnregisterServer {0}", guid);
RegistryKey root;
RegistryKey rk;
// Delete from DTS Cache in HKEY_CURRENT_USER
root = Registry.CurrentUser;
rk = root.OpenSubKey(TASK_CACHE, true);
rk.DeleteSubKey(guid, false);
rk.Close();
root.Close();
  }
  catch(Exception e)
  {
System.Console.WriteLine(e.ToString());
  }
 }
}

}


主站蜘蛛池模板: 亚洲免费视频在线 | 日韩中文字幕视频在线观看 | 四虎一区| 青青草视频免费观看 | 青青国产成人精品视频 | 日本成人免费在线 | 日本国产在线视频 | 色啦啦影院 | 伊人网在线免费观看 | 欧美无遮挡国产欧美另类 | 最近2019中文字幕大全第二页 | 在线亚洲天堂 | 日韩美女免费线视频网址 | 三级经典三级日本三级欧美 | 日韩3p| 日本一区二区影院 | 在线免费视频国产 | 她也啪在线视频 | 一区二区免费视频 | 日本伦理中文字幕 | 亚洲免费视频一区 | 揄拍成人国产精品视频 | 日韩污视频在线观看 | 一级一级一级毛片免费毛片 | 日本乱码视频a | 中文字幕在线精品视频站app | 青青青青青视频免费播放 | 永久在线观看www免费视频 | 午夜免费啪视频观看网站 | 香蕉人人超人人超免费看视频 | 亚洲永久精品免费www52zcm男男 | 日日干日日摸 | 亚洲精品在看在线观看 | 亚洲成在人线影视天堂网 | 速度与激情9完整版免费观看 | 天天天天干 | 中文字幕天堂最新版在线网 | 丝袜美腿护士办公室在线观看 | 色视频一区二区三区 | 亚洲欧美成人完整版在线 | 色综合久久夜色精品国产 |