怎样通过Visual C#.net创建一个DTS任务

连锁酒店管理系统设计与实现 目 录 摘 要 Abstract 引 言 第一章 绪 论 1.1 系统开发背景 1.2 课题研究目的及意义 1.3 国内外现状及发展动态 1.4 系统开发工具及相关技术 1.4.1 系统开发工具 1.4.2 数据库开发工具 1.4.3 C#开发语言介绍 第二章 系统分析 2.1 需求分析 2.1.1 系统的主要功能 2.1.2 系统的实现目标 2.1.3 系统的性能需求 2.1.4 运行环境 2.2 可行性分析 2.3 数据需求分析 2.4 数据字典 2.5 数据流图 第三章 系统设计 3.1 系统功能结 阅读详情

一、摘要
这篇文章描述了如何利用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());

}

}

}

}

【现代信号处理】01 -概率论与随机过程回顾 概率论与随机过程回顾 文章目录概率论与随机过程回顾1. 统计模型的相关概念1.1 统计实验(不确定性)1.2 样本点1.3 样本空间Ω1.4 概率1.5.统计模型是先验的2. 概率和统计的差异2.1 联系2.2 差异2.3.1 概率和统计问题的三要素2.3.1.1 model-模型2.3.1.2 data-数据2.3.1.3 decision-决策2.3.2 关系图3. 样本空间的重要性3.1 贝朗特悖论3.1.1 解法一3.1.2 解法二3.1.3 解法三3.2 结论4.概率相关的概念4.1 随机变量4. 阅读详情

相关推荐

高光谱图像处理和分析软件(包含雷尼绍Renishaw wdf 文件导入解析功能)

是一款基于微软windows操作系统的多传感器成像工具,用于处理和分析高光谱图像。它是一个模块化的系统,由一个基本的引擎,一个图形用户界面,一个化学计量工具箱和可选的用户提供的模块组成。它支持最重要的光谱成像技术,如UV/Vis、红外、拉曼、太赫兹、光发射/吸收和质谱。除此之外,还允许用户将高光谱图像与物理属性图和传统高分辨率彩色照片合并在一起 链接:https://pan.baidu.com/s/1ruQ5YSh5_ZS9wx_V3Q5Oow 提取码:qdx0 ...

业余程序员小徐的博客 8067

利用Visual C#.net 创建一个DTS 自定义的任务

本文描述了如何利用Visual C#.net 创建一个DTS 自定义的任务。你可以通过C#.net创建自定义的任务的方式扩展DTS的功能。之后你可以安装并注册任务,他讲出现在DTS设计其中,就像默认的DTS任务。总之,你能够使用.NET Framework创建自定义的任务。  在本文中除了讲创建一个DTS自定义任务外,还包括一下部分内容:  1、这篇文章中自定义的代码分为编译、注册和安装自

sunshmcsdn的专栏 752

PLC编程标准之争:IEC61131与IEC61499核心区别与选型指南

在工业自动化领域,PLC编程长期依赖IEC61131标准,它定义了梯形图、结构化文本等语言,通过周期扫描机制保证确定性执行。然而,随着工业4.0和分布式控制场景的兴起,IEC61499以事件驱动模型打破传统范式,让功能块能跨设备协同,实现更灵活的柔性产线和模块化系统。理解两者在程序结构、数据交互、部署方式和实时性上的差异,是选型与工程落地的关键。本文从基础概念出发,剖析执行模型与架构演进,结合一线调试经验,帮助工程师在传统PLC与下一代标准之间做出理性决策。

weixin_27014595的博客 267

用Visual C#.NET建一个DTS任务

       本文描述了如何利用Visual C#.net 创建一个DTS 自定义的任务。你可以通过C#.net创建自定义的任务的方式扩展DTS的功能。之后你可以安装并注册任务,他讲出现在DTS设计其中,就像默认的DTS任务。总之,你能够使用.NET Framework创建自定义的任务。   在本文中除了讲创建一个DTS自定义任务外,还包括一下部分内容:   1、这篇文章中自定义的代码分为编译

1423

Opencv计算相机响应函数(Camera Response Function)与Radiance

本文主要用于记录自己在学习CRF过程中遇到的一些问题。 CRF模型 I=f(V(t⋅L))I=f(V( t\cdot L))I=f(V(t⋅L)) 其中III为相机灰度值Intensity,LLL为环境中irradiance,ttt为曝光时间,VVV为相机镜头参数,fff为相机响应函数CRF。 有些论文中认为相机镜头参数是线性的不考虑,但有些考虑了衰减即靠近图像边缘亮度会暗一些,但没有看到二者同时计算的,如果同时计算两个非线性的函数,我觉得可能会有不确定性,在这里还请教一下了解的朋友。 控制

larrydong的博客 5999

配电变压器测控终端装置设计

配电变压器测控终端装置在电网运行中承担着数据采集、状态监测、故障预警及远程控制的关键任务,其性能直接关系到配电系统的安全性与可靠性。本研究围绕测控终端的硬件电路、软件算法、通信系统及系统优化展开深入分析,并基于实验测试验证系统性能。硬件设计包括模拟量输入电路、电压电流信号变换电路、A/D转换电路、控制与通信电路及系统电源电路,确保信号采集的高精度与系统的稳定性。软件部分涵盖系统控制程序、数据采集与处理程序、通信程序及显示与控制程序,实现数据的实时处理与传输。通信模块结合RS-485、CAN总线及以太网技术,

weixin_44553616的博客 1102

使用.NET写Managed用户自定义函数(UDF)C#/VB.NET

这是一个UDF例程。其中只有一个自定义函数MyFunction。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using Microsoft.Win32; namespace MyUDF {

红泥屋 1692

【OpenCV】图像的像素直方图 图像特征点 cv::FAST cv::ORB ORB_SLAM2::ORB

文章目录图像直方图代码实现cv::FAST和cv::ORB 检测图像特征点cv::FAST和cv::ORB 检测图像特征点代码实现ORB_SLAM2::ORB和自己实现ORB图像特征点检测效果对比ORB_SLAM2::ORB和自己实现ORB图像特征点检测效果对比代码实现 图像直方图代码实现 图像是由不同数值(颜色)的像素构成的,像素值在图像中的分布情况是图像的重要属性,可以用直方图修改图像的外观,标识图像的内容,检测图像中特定的物体或纹理。 单通道灰度图像中每个像素都有一个 0(黑色)-255(白色)的整

小秋 AI SLAM 入门实战教程 2509

DTS 用法学习 ZT

//加入名称空间using System.Data;using System.Data.SqlClient;//定义方法GetData(),返回一个数据表private System.Data.DataTable GetData(){SqlConnection conn= new SqlConnection(@"Server=PXGD2;Initial Catalog=pingxiang;Ui

雪后残阳 2525

无法将“choco”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的解决方案

本文主要介绍了无法将“choco”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的解决方案,希望能对使用wIndows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

YOLOv9实战:刀具磨损实时监控从摄像头到预测性维护(附车间落地代码)

摘要: 本文针对制造业刀具磨损监控痛点,提出基于YOLOv9的实时视觉检测方案。通过工业相机采集刀具图像,结合图像预处理(去油污、增强对比度)和深度学习模型,实现磨损等级分类与寿命预测。系统集成硬件选型(抗油污相机、红色环形光源)、数据增强(旋转、噪声模拟)及预测性维护(PLC联动),实测刀具利用率提升30%,工件报废率降至0.5%以下。详解车间部署、模型训练到系统落地的全流程,附代码与避坑指南,为工业视觉项目提供实战参考。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 541

通过Visual C#.NET建一个DTS任务

本文描述了如何利用Visual C#.net 创建一个DTS 自定义的任务。你可以通过C#.net创建自定义的任务的方式扩展DTS的功能。之后你可以安装并注册任务,他讲出现在DTS设计其中,就像默认的DTS任务。总之,你能够使用.NET Framework创建自定义的任务。  在本文中除了讲创建一个DTS自定义任务外,还包括一下部分内容:  1、这篇文章中自定义的代码分为编译、注册和安装自

杨义贤心灵驿站 607

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一)详细介绍了3D-EM Full Wave Extraction全波S参数提取,下面以一个差分过孔结构进行实例分析,以下图为例。模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构。是一个简单的4层板,top换层到bottom层的差分过孔结构。起始频率为100Mhz,截止频率为20Ghz,线性扫描。上面那根曲线是插损,下面那根线是回损。

weixin_54787054的博客 343

通过Visual C#.NET建一个DTS任务之一(转)

本文描述了如何利用Visual C#.net 创建一个DTS 自定义的任务。你可以通过C#.net创建自定义的任务的方式扩展DTS的功能。之后你可以安装并注册任务,他讲出现在DTS设计其中,就像默认的DTS任务。总之,你能够使用...

csdn864883的博客 156

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

通过Visual C#.NET建一个DTS任务之二(转)

为自定义的任务添加代码    代码的自定义注册。.NET没有开放DllReginsterServer 和DllUnregisterServer 像COM组件的入口,但是你可以使用ComRegisterFunctionAttrib...

csdn864883的博客 116

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SSIS常用的包—脚本和组件任务

<br />脚本任务允许利用Microsoft Visual Studio环境来使用VB.NET语言创建和执行脚本。ActiveX任务允许从SQL Server 2000中执行脚本。与ActiveX任务相比,脚本任务有一些优点。如下列举。一整套智能设计环境轻松地向脚本传递参数轻松地在脚本代码中设置断点可以以二进制形式预编译脚本<br />在脚本任务的编辑界面内如图3-17有一个脚本语言选项用来选择编辑语言,对于SQL Server来说只能选择VB.NET。如果PreCompileScriptIntoBi

plean的专栏 2898

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VS2017搭建ASP.Net Core和Angular5项目

本文是使用Angular5TemplateCore开发一个适用于ASP.NET Core的Angular 5应用程序。我们来详细看看 先决条件 确保您已经在计算机上安装了所有先决条件。如果没有,那么先下载并安装所有。 首先,从这个链接下载并安装Visual Studio 2017  下载并安装.NET Core 2.0 下载并安装Node.js v9.0或更高版本

xiaoyue 1万+

【上海】网络游戏公司招聘ASP.NET程序员

公司名称:上海麦格特尔网络科技有限公司(Magic Grids., Ltd.) 公司业务:网络游戏开发运营办公地址:宜山路829号(近桂菁路桂林路)总机号码:64959196 Job Requirements:- university degree, major in IT - 1+ years of experience on web development - Practiced

742

ASPX(C#)中调用SQLSERVER2005中的SSIS

第一步:创建SSIS打开VS2005,创建商业智能项目---Integration Services项目(需在安装sqlserver2005时,选择安装Integration Service服务)第二步:在程序中引用 Microsoft.SQLServer.ManageDTS第三步:private void Excutepackage(string path)    {       

486

连锁酒店管理系统设计与实现(论文+源码)_kaic

现代化酒店是城市的重要基础设施,酒店业的发展,直接支持着城市经济的繁荣、旅游业的兴旺和广大市民的生活需要,同时也是城市建设现代化的一个重要标志。又比如,系统数据库,有Access、Sybase、MySQL、SQL Server等,对于酒店系统来说,采用什么数据库与酒店的规模比较相关,较小的酒店可以采用比较简单的数据库如Access,这样使用维护都可以做的比较简单,而规模大的酒店就应该用SQL Server这样的数据库,可以保障数据比较安全、系统比较稳定,但同时也要求有专门的系统管理员来维护。

远程调试、小程序、管理系统、JAVA、C#、IDEA、VS开发工具等 623
上一篇: Oracle的存储过程怎么写呀?
下一篇: 如何在Web页面上直接打开、编辑、创建Office文档
Jasonchen82
博客等级 码龄25年 3粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值