本文描述了如何利用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教程”能给你我一个互相学习的机会,如果你能从中获益那将是我最大的快乐,那时你一定会发现编程比游戏有趣得多
欢迎分享,转载请注明来源:表白网
评论列表(0条)