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

通过Visual C#.NET建一个DTS任务,第1张

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

 在本文中除了讲创建一个DTS自定义任务外 还包括一下部分内容  

  这篇文章中自定义的代码分为编译 注册和安装自定义任务  

  这部分一个有特色的部分就是你可以运行自定义的任务  

  在开发过程中你可以使用本文提及的一些工具(除非另有说明 这些工具已经包含在 NET中了 您可以通过 NET的命令行运行这些工具)  

 为DTSSpkg dll创建一个及时的包 

 如果一个基于微软 NET客户机访问一个组件 你必须使用一个包(这个组件包含的) 这类的包是及时的运行包(RCW)并且你也可以通过开放Dtspkg dll的类型库编译 你也可以使用类型库导出工具(Tlbimp exe)编译RCW 如   tlbimp exe C:\ProgramFiles\Microsoft SQLServer\ \tools\Binn\dtspkg dll /out:Microsoft SQLServver DTSPKG dll/keyfile:DTSPkg snk  /keyfile 参数代表Microsoft SQLServer DTSPkg dll带有强类型名用public或private关键字 使用强类型名工具(sn exe)在DTSPkg snk 前创建关键字 sn exe –k DTSPkg snk 

 你应该使用一个强类型名像其他的全局集合缓存 因为你安装了运行包  

 在全局集合缓存中安装运行包 

 用全局集合缓存工具(GaCutil exe)安装运行包  

 gacutil exe /I Microsoft SQLServer DTSPkg dll   安装了运行包后 你可以像添加 NETC#工程中的引用一样的添加  

 为自定义的任务添加代码 

 代码的自定义注册 NET没有开放DllReginsterServer 和DllUnregisterServer 像组件的入口 但是你可以使用ComRegisterFunctionAttribute 类执行任务注册和撤销注册 在自定义类声明之前添加下面代码  

 [Guid( A F A E DE A E CD ) 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\A F A E DE A E CD \Implemented Categories\{ EB C CF AE E AA A D } 

  EB C CF AE E AA A D 是DTS包对象的类编号 因为所有的自定义的任务执行自定义的接口所以必须注册 注册函数添加下面的注册键值  

 HKEY_CURRENT_USER\Sofare\Microsoft\Microsoft SQL Server\ \DTS\Enumeration\Tasks\A F A E DE A E CD  

 下面的DTS任务缓存目录列表 使自定义的任务出现在DTS设计器中  

 HKEY_CURRENT_USER\Sofare\Microsoft\Microsoft SQL Server\ \DTS\Enumeration\Tasks\ 

 下面的代码示范非注册函数的任务移出的执行 面注册函数是ComUnregisterFunctionAttribute类在 NET运行库的一部分 想浏览这个函数的完整代码 你可以看 编译 注册和安装自定义任务 部分  

 [System Runtime InteropServices ComUnregisterFunctionAttribute()]  static void UnregisterServer(Type t)  {   //code to unregister custom task  }  

 免注册函数通过从注册表中删除下面键值从DTS任务缓存中移出任务 

 HKEY_CURRENT_USER\Sofare\Microsoft\Microsoft SQL Server\ \DTS\Enumeration\Tasks\A F A E DE A E CD  

 最后 自定义的任务像dual_interface 组件一样被开放 您从所有的类的public 非静态的字段 属性和方法创建一个默认的接口 在下面的一行代码在自定义任务源文件中USING应用之后  

 [assembly:ClassInterface(ClassInterfaceType AutoDual)] 

 这部分的代码已经完全列举了  

 增加功能性的自定义任务 

 本文 编译 注册和安装自定义任务 部分包含一个简单的DTS自定义任务代码 任务有两个属性 Name 和Description Description属性的值就会出现在消息框中 这个例子的描述了一个最小化的代码你可以使用已有的功能性的DTS定义任务 然而 你可以通过执行CustomTaskUI接口创建一个用户界面 但是那并不作讨论 通过只执行自定义的接口 DTS设计者为自定义任务创建一个默认的有户界面  

 所有的DTS自定义任务执行自定义任务接口 自定义的用户接口是由两个属性 一个集合和一个方法  

  Name和Description属性  

  Properties集  

  Execute方法  

lishixinzhi/Article/program/net/201311/15477

第四章 按钮(一)

从本章开始我们将正式进入VB的编程世界,但这还仅仅是个开端,要编出功能强大的软件,还要学很多东西,那就要看以后的VB高级教程了,我也得努力学啊!

按钮是我们在Windows操作见到最多的控件,它们有着各种各样的功能:“确认”、“取消”、“下一步”等等,这些都是按钮的表现,另外还有很多图形话的按钮,其实它们并没什么不同,所有的按钮都是通过单击(click)事件实现的,只不过是在外表不同罢了。下面就让我们建立一个最简单的按钮,双击工具箱的CommandButton,将在窗体上建立一个形如图4-1的按钮,它的缺省名(Name属性)为Command1,我们可以把它改名为cmdExit,把Caption属性设为“退出”,然后双击,按钮填写代码:

PrivateSubcmdExit_Click()

UnloadMe

EndSub

按下F5或者工具条上的播放按钮,运行程序。图4-2当你按下退出按钮的时候,就会自动退出程序,原因是当你单击按钮时激活了它的Click事件,执行“UnloadMe”语句,使得窗体被卸载。

上面举了一个比较简单的例子,下面的例子稍微复杂些:

新建窗体,控件布局如图4-3所示,包括一个List控件,一个Text控件和两个按钮(Command1和Command2), (比较简单的程序我们都采用缺省名),对它们属性做如下修改:

List1

Caption=“请输入你的名字”

Text1

Text=“”(空字符串)

Button1

Caption=“复原”

Enabled=False

Button2

Caption=“清除”

把使用Button1的Enabled属性设为False(假),是使程序在初始时,无法单击Command1。按F5,运行程序,图4-4,复原按钮成为灰色,不可选。

当然现在程序还什么也不能做,下面我们在程序中添加代码:

首先在General里声明全局变量:

DimStoreStringAsString'用来储存字符串

※注意:为什么用全局变量?

VB里每一个小过程都相当于一个程序,程序里的变量称为局部变量,是只能在程序内部使用的,而当程序调用结束后,由于从内存中被清除,所以变量储存的值也就消失了,这里的全局变量是用来在过程中传递字符串。

接着填写以下代码:

PrivateSubCommand1_Click()

Text1Text=StoreString

Command1Enabled=False

EndSub

PrivateSubCommand2_Click()

StoreString=Text1Text

Text1Text=""'清除

Command1Enabled=True

EndSub

运行程序,如图4-5。按下“清除”,文本框被清除,按下“复原”,文本有被恢复,许多程序中的Undo/Redo就是利用这个原理实现的,现在知道为什么内存越多越好了吧。

我们在把程序修改一下,把Button2删除,Button1的Enabled属性改为True,Caption改为“清除”,填写代码:

PrivateSubCommand1_Click()

IfCommand1Caption="清除"Then

StoreString=Text1Text

Text1Text=""'清除

Command1Caption="复原"

Else

Text1Text=StoreString

Command1Caption="清除"

EndIf

EndSub

同样可以上面的功能,但是却少用了一个控件,控件使用少的程序启动会快些。

下面的例子要更加复杂些,大家一定都用过Windows附件中的计算器,它是一个标准的科学计算器,利用VB我们也可以做到,只是没有那么复杂,四则运算而已。

先建立一个新的项目文件,里面包含一个Form1的窗体。然后,添加控件,包括一个Text框(Text1),和17个按钮,这17个按钮使用的名称都是Command1,只是Index属性不同,就好象一个数组,创立一组按钮的方法是,先在窗体上建立一个按钮(Command1),然后在Command1上击鼠标右键,选择复制(Copy),然后在窗体上任意部位击右键,选择粘贴(Paste),系统会提示是否创建控件组,选择“是”,重复上面步骤,直至创立17个按钮为止。各控件属性如下表:

Text1

BackColor=H00C0FFFF

Text=“0”

Command1

Index0DD16

Index0DD9Caption=“0”-“9”

Index10Caption=“”

Index11Caption=“=”

Index12Caption=“ ”

Index13Caption=“-”

Index14Caption=“×”

Index15Caption=“÷”

Index16Caption=“清除”

如果想改变一些其他的属性,比如字体,可以自己定义一下Font属性,如果相对多个控件的共同属性进行改变,可以在窗体上按下鼠标,拖动,把多个控件一起选定,然后对它们的共同属性进行修改。

别看这个东西小,还费了近我两个小时呢,不觉大叹手生,里面也有些地方很绕弯子,我尽量解释清楚。

在编写程序之前,我们先来回顾一下计算器的使用。

按下数字键在液晶屏上会出现数字,这是最基本的功能。

第一次按下运算键,再按下数字键,将重新输入第二个数字,再次按下运算键,将算出前两个数的结果,然后按下数字键,将又重新输入新的数字。

输入数字后,按下“等于键”将仍输出原来的数字,输入运算符和第二个数字后在按下“等于”,将得到二者的结果。然后又重复第二、三步。

按下“清除”,数据被全部清除。

了解了这些,我们一步一步实现。

先实现数据的输入,请看代码。

与未创立组的控件相比,它的事件里多了Index参数,组里所有的对象都使用同一个事件。

先在General里声明窗体级全局变量:

DimNum1,Num2AsSingle

DimStrNum1,StrNum2AsString

DimFirstNumAsBoolean'判断是否是数字开头

因为Text1里是存放字符串的,所以要把输入的数据进行运算,必须把字符型变量转变为实型变量,分别用Num1、Num2和StrNum1、StrNum2进行存放。

在Form_Load事件里给变量初赋值:

Num1=0

Num2=0

StrNum1=""

StrNum2=""

FirstNum=True

因为17个按钮使用的是同一事件,所以我们用一个SelectCase语句区分各个按钮,双击任意按钮输入代码:

PrivateSubCommand1_Click(IndexAsInteger)

SelectCaseIndex

Case0To9

IfFirstNumThen

StrNum1=Str(Index)’实型转字符型

FirstNum=False’初赋值为假

Else’非初赋值

StrNum1=StrNum1 Str(Index)

EndIf

Text1Text=StrNum1’显示

还有其他语句,等待插入

EndSelect

EndSub

#p#副标题#e#

运行程序的话已经可以输入数据,下面我们来处理小数点。

在General里声明新的变量:

DimPointFlagAsBoolean'判断是否已有小数点

我们知道小数点只能输入一次,一个数据中不能有多个小数点存在,所以需要一个布尔变量做判断。

在Form_Load里进行初赋值:

PointFlag=False

在Command的单击事件里接着上面输入新的代码:

Case10

IfNotPointFlagThen’如果没有小数点

IfFirstNumThen’如果是第一个字符

StrNum1="0"

FirstNum=False

Else

StrNum1=StrNum1 ""

EndIf

Else’已有小数点

ExitSub’则退出单击事件

EndIf

PointFlag=True

Text1Text=StrNum1

#p#副标题#e#

long factorial(int m) //用于求阶乘

{

if(m==0||m==1)

return 1;

else return mfactorial(m-1);

}

long forSum(int n) //用于求阶乘之和

{

int i=0;

long y=0;

for(i=1;i<=n;i++)

{

y+=factorial(i);

}

return y;

}

#include <stdioh>

int main()

{

long y=0;

int n=0;

printf("请输入一个 n:");

scanf("%d",&n);

printf("y=%d\n",forSum(n));

printf("n=%d\n",n);

return 0;

}

第二题:

int weiShu(int x) //用于判断数x是几位数

{

int flag=0;

do

{

x=x/10;

flag++;

}while(x!=0);

return flag;

}

#include <stdioh>

{

int flag=0,x=0,i=0;

int sum=0;

printf("请输入一个数 x=");

scanf("%d",&x);

flag=weiShu(x);

for(i=1;i<=flag;i++)

{

sum+=x%10;

x=x/10;

}

printf("%d各个位上数字之和是%d\n",x,sum);

}

我们需要什么?当我们在一个精彩的游戏世界中游历了一番之后,或是惊叹于某一工具软件的小巧精致之余,多少总会产生些许编程的冲动。编程吗,在以前如果你对电脑还是一个门外汉,那实在是一件可望而不可及的事情。如果运用基于DOS下的编程语言,譬如C、Qbasic、Pascal等等,真不知何年何月才能有所成就。

编程是需要天赋的,你必须在大脑中对整个程序有一个清晰的轮廓,一个高效的流程,这并不是每个人都能做到的,你必须思之慎之,这也使编程变成一件最枯燥无味的事情。但在第四代计算机语言(可视化编程)出现后,可以确切的说它开发了人们的更多天赋,并不局限于那些头脑异常清晰的人,每一个人都可以发现自己也可以编出一些从前不敢问津的程序,想象力的充分发挥才是第四代语言的精粹。

VisualBasic(以下简称VB)可以说是可视化语言的先驱了,而且它也是可视化程度最高的一个,从几年前VB诞生之日起到现在,它已经经历了五个版本,而且现在微软正在紧张的进行着VB60的研制、测试,这么高的更新率,不外乎说明两个问题:用户对VB的热衷,微软对VB的重视。不可否认微软对市场的预测能力是极为高明的,而它强大的技术、财力支持也使它在许多以前未进入的领域,在不长的时间内有成为最有力的竞争对手,如IE之于浏览器领域,《帝国时代》之于游戏都是最好的例证。对于VB现在也有一个很强的竞争对手DDDelphi,有人把它称作VB杀手,这显然有偏激之处,VB的确有它的不足之处,但Delphi又何尝不是呢,而且以微软对VB的倾心,VB的功能必然会越来越强大。

VB的诞生

VB的出现可以说是MicrosoftWindows的日渐成熟的必然产物。MicrosoftWindows为程序员和最终用户提供了一个共同的人机界面。对用户,Windows提供了一个图形鼠标的操作环境,该环境对所有的应用程序都一样;对于程序员,Windows提供了一组预定义工具----称之为MicrosoftWindows的软件开发工具箱(SDK),该工具能使程序员建立一个与Windows界面相同的应用程序,而且,程序员不必关心最终用户的硬件配置情况。在这一开发环境中,程序员唯一困难的是MicrosoftSDK提供了六百多个函数和与其一致的事件驱动(event-driven)编程技术。两种新方法的交叉使众多的程序员重新陷入困境,程序员不仅要掌握程序驱动编程技术和六百多个函数的功能,而且还得用C语言描述这些问题。因此一般情况下,程序员首先要掌握C程序设计技术,而后再开始学习SDK。这样的条件下就要求在Microsoft多任务环境下出现一种操作方便,使用简单的新工具----VisualBasic由此诞生。

何为可视

英文Visual的意思是“视觉的”,“可视的Baisc”这个名字可能抽象了点,但实际上它却是最直观的编程方法,之所以叫做“可视”,你只要看到VB的界面就会明白,实际上你无需编程,就可以完成许多步骤。在VB中引入了控件的概念,在Windows中控件的身影无处不在,各种各样的按钮、文本框、无线钮,都是控件的种类,VB把这些控件模式化,并且每个控件都有若干属性用来控制控件的外观,工作方法。这样你就可以象在画板上一样,随意点几下鼠标,一个按钮就完成了,这些在以前的编程语言下是要经过相当复杂的工作的。

我的希望:

我在学习VB的过程中也曾遇到了许多困难,而且用的参考书大都来自译文,毕竟美国人和中国人的表达方式有所不同。这也造成了理解上的困难,所以我想为什么我不能写一个给中国人看到VB教程呢,于是我这么做了。也曾经在杂志上发表过几篇用VB制作小程序的文章,但受杂志的限制(篇幅、内容等等)(我得听小编的),总没有一个机会系统的介绍一下VB,造成了小小的遗憾。不过,我自己的主页建好后,终于这个愿望可以实现了,利用HTML可以方便的把文字与结合起来,不失为一个教学良所,也希望能够得到大家的支持。

希望“VB教程”能给你我一个互相学习的机会,如果你能从中获益那将是我最大的快乐,那时你一定会发现编程比游戏有趣得多

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/4006490.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-04-09
下一篇2024-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存