封装为dll会带来很多的好处,主要包括只是产权的保护,以及效率和安全性能的提升。这个例子中被封装的dll文件可以隐藏access 数据库的实际路径。

VB生成的DLL封装ASP代码来连接 数据库(Access)。

本文用一个最简单的连接access 数据库的例子来说明如何将asp代码封装为dll文件。

我们用vb,最常见的方式来封装asp代码。

我们需要封装的对象如下:

'Proconn.asp
dim ProConn
set ProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")

我们将下面的部分封装
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")

分析一下这段要封装的内容,
它的前半部分就是一个字符串:
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="
用&连接上后半部分的另一个字符串。
后半部分的另一个字符串是Server.MapPath对象函数的返回值。

下面开始这个封装的操作过程。
首先
新建一个VB下的ActiveX DLL工程,工程的名称Project1更改成ConDBDLL
方法class1的名称更改成cs
工程名和方法名会在调用这个DLL的时候使用到,大家可以按照自己命名规则定义,但请注意好好使用。
这个DLL的代码部分书写如下:

Dim rp As Response
Dim rq As Request
Dim ap As Application
Dim sr As Server
Dim sn As Session

Public Sub OnStartPage(MyScriptingContext As ScriptingContext)
Set rp = MyScriptingContext.Response
Set rq = MyScriptingContext.Request
Set sr = MyScriptingContext.Server
Set ap = MyScriptingContext.Application
Set sn = MyScriptingContext.Session
End Sub

Public Sub OnEndPage()
Set rp = Nothing
Set rq = Nothing
Set sr = Nothing
Set ap = Nothing
Set sn = Nothing
End Sub
'以上语句是必须的,将原本的对象作了简化处理,并在两个基本函数中作了处理

Public Function ConnectDB() As Variant
ConnectDB = "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="
End Function
'上面这个函数是处理前半部分字符串的,直接返回这个字符串的内容

'另外定义下面这个函数来处理后半部分内容
Public Function DBPath() As Variant
DBPath = sr.MapPath("DB.asp")
End Function
'注意上面使用的是sr,不要使用成Server了

到了关键的一步,给这个工程添加"Microsoft Active Server Pages ObjectContext Object Library" 的 Reference
添加方法,选择菜单中的"Project"->"Reference",在打开的对话框里选择。
对了,还要选择上"microsoft activeX data objects 2.6 library"

进行完以上操作,我们就可以编译生成DLL了,(别忘了前面的改工程名和方法名)

准备好 数据库文件DB.asp (由DB.mdb更改后缀而成,密码123)

下面就是调用封装的连接 数据库的asp文件代码:

由于是自己创建的DLL,把它拷贝到相应的目录后,必须注册才能使用。
注册的方法,在“运行”中执行:
Regsvr32.exe dllname.dll

取消这个DLL的注册的方法是:Regsvr32.exe /u dllname.dll

注册完毕,我们的工作基本上就做完了,现在我们可以使用这样的封装方法连接具有针对性的 数据库了。

不过有一点需要特别注意的是:
由于
Dim ConDB
set ConDB=Server.CreateObject("ConDBDLL.Conn")
'ConDB就是创建的DLL对象
这是在ASP中创建的对象,包括ProConn,那么我们在任何使用到(引用)ProConn.asp的其他ASP文件中记得释放这两个对象!
ProConn.close
set ProConn=nothing
set ConDB=Nothing
否则系统会由于对象没有释放,而变得越来越不堪重负。

关于这个封装ASP代码连接Access 数据库的方法,我想完全适用其他 数据库的连接方法。

再例如,下面的封装的例子:

首先要申明变量:

Private WenScriptingContext As ScriptingContext
Private WenApplication As Application
Private WenRequest As Request
Private WenResponse As Response
Private WenServer As Server
Private WenSession As Session

为了在WenConnection类中使用ASP的内建对象,必须在此类中写一个OnStartPage子函数。那是因为无论什么时候用户访问一个带有本组件的ASP文件,IIS就会把ScriptingContext传送给我们的对象请我们使用。这个ScriptingContext包括了全部的ASP方法和属性,这使得我们有能力访问所有ASP的对象。

Public Sub OnStartPage (PassedScriptingContext As ScriptingContext)
Set WenScriptingContext = PassedScriptingContext
Set WenApplication = WenScriptingContext.Application
Set WenRequest = WenScriptingContext.Request
Set WenResponse = WenScriptingContext.Response
Set WenServer = WenScriptingContext.Server
Set WenSession = WenScriptingContext.Session
End Sub

我们既然用OnStartPage函数来创建对象,那么我们这里就用OnEndPage子函数来释放对象:

Public Sub OnEndPage()
Set WenScriptingContext = Nothing
Set WenApplication = Nothing
Set WenRequest = Nothing
Set WenResponse = Nothing
Set WenServer = Nothing
Set WenSession = Nothing
End Sub

接下来定义两个函数RsResult()和DataSource():

Public Function Rs(strsql As String) As Recordset
Dim oConn As Connection
Dim oRs As Recordset
Dim strconnstring As String
strconnstring = "driver={sql server};server=ServerName;uid=sa;pwd=;" & _
"database=DataBaseName"
oConn.Open strconnstring
oRs.ActiveConnection = oConn
strsql="Select * From tableName"
oRs.Open strsql, oConn, 1, 3
Set Rs = oRs
End Function

Public Function DataSourceConnection() As Variant
DataSourceConnection = "driver={sql server};server=ServerName;uid=sa;pwd=;database=DataBaseName"
End Function

三、 存工程名为WenADODB.vbp和保存类名为WenConnection.cls,然后点击“文件”—>“生成WenADODB.DLL”编译成动态连接库文件。VB在编译好动态连接库文件的同时也将该组件注册到注册表里了,要是想在另外一台机器上注册该组件的话,请用以下指令注册或反注册:

Regsvr32 x:/路径/WenADODB.dll x:/路径/为WenADODB.dll文件存放的盘符和路径

Regsvr32 /u x:/路径/WenADODB.dll 参数U为反注册

四、 在ASP文件中调用WenADODB.dll组件的例子。

<%

Set Conn=Server.CreateObject("WenADODB.WenConnection") ‘调用组件创建对象实例
objConn=Conn.DataSourceConnection()
application("strconn")=objConn

set Rs=Server.CreateObject("ADODB.Recordset")
sql="select * from TableName order by ID DESC"
Rs.open sql,application("strconn"),1,3
%>
<Table align="center" border="1">
<%
if Rs.Bof and Rs.Eof then
Response.Write "暂时还没有任何数据。"
else
Do while not Rs.Eof
%>
<tr width=100%>
<td width=50%><%=Rs("Field1")%></td><td width=50%><%=Rs("Field2")%></td>
</tr>
<%
Rs.MoveNext
Loop
end if
Rs.Close;Set Rs=Nothing
%>
</Table>

五、 小结

我们这里只是编写了一个连接 数据库的简单的动态连接库文件,利用VB的强大组件编写功能还可以写出功能更加强大跟齐全的组件,来完成更加实用的任务

关键字 如何把ASP编写成DLL

这篇文章主要是把ASP代码变成组件,开发者不仅是加快了ASP的速度,而且也能保护自己的代码.
下面,我们会来编写一个非常简单的组件,重点是知道怎样开发DLL组件,而不是其复杂的代码!这些都要靠你们自己以后的努力了.

服务器端组件

首先,服务器端的组件要有别于客户端的组件.客户端的组件是通过网络传输,依靠HTML来起作用.而且只能在IE上有用.但是服务器端的组件是运行在服务器端,它在服务器上执行各种操作.因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器.

当IIS被请求执行一个ASP程序,它首先会在ASP文件中找到〈%%>标签之间的代码,并且执行它(也可以是〈scriptrunat=server>〈/script>之间的代码).如果这个ASP程序在先前被调用过,那么它就会用内存中的编译过的程序来向用户返回HTML代码,如果没有,那么它就重新编译.这里ASP就比CGI多一点速度优势,因为CGI是每一个请求都使用一个线程.这样就大大消耗了服务器的资源.

想不想你写的程序自己就能在IIS运行!?!现在你就行了!使用VB5(当然现在是VB6了),你就能建立DynamicLinkedLibraries(DLL文件),它能在IIS上直接运行(如果有asp文件来请求的话).

系统和软件的要求

你需要一个32位的操作系统来运行ASP.当然你也得安装IIS或PWS.我们下面的程序是在windows95+PWS+VB5的环境下开发的.

我们开始吧

启动你的VB,选择ActiveX图标.这个图标可以在新建工程找到!VB会提供一个默认的工程名(project1)和类名(class1).我们会将这两个名字都改掉.在改名之前,请首先确认我们拥有MicrosoftActiveServerPagesObjectLibrary,它在我们的程序非常有用.从菜单中选择"工程",然后在其中选择"引用",就会出现"引用"窗口
从中选择MicrosoftActiveServerPagesObjectLibrary.

给工程和类命名

现在我们来根据自己的爱好来为project1和class1来命名吧!给它们命名也是很重要的,我们以后会用这个工程名和类名来创建这个组件的实例!后面详细介绍.

如何改名,我就不想多说了!
我们的工程名改为Exmaple,类名为Helloword

怎样使用工程和类

现在我们有了我们自己的工程(Example1)和类名(HelloWorld).以后我们就会在ASP代码中使用它们的名字来引用这个组件.在ASP中我们就这样引用,如下:

SetObjReference=Server.CreateObject("ProjectName.ClassName")

对于我们工程的引用就是:
SetObjReference=Server.CreateObject("Example1.HelloWorld")
现在我们就能用ObjReference来调用我们在组件中所创建的函数,子程序.下面我们会来写一个SayHello的子程序,我们执行它的代码如下:

〈%
SetObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

为了在Helloword类中使用ASP的方法,你必须在此类中写一个OnStartPage
子函数.如下:

PublicSubOnStartPage(PassedScriptingContextAsScriptingContext)
SetMyScriptingContext=PassedScriptingContext
EndSub

现在,无论什么时候用户访问一个带有本组件的ASP文件,IIS就会把ScriptingContext传送给我们的对象请我们使用.这个ScriptingContext包括了全部的ASP方法和属性.实现上,这使得我们有能力访问所有ASP的对象.看下面的代码:

PublicSubOnStartPage(PassedScriptingContextAsScriptingContext)
SetMyScriptingContext=PassedScriptingContext
SetMyApplication=MyScriptingContext.Application
SetMyRequest=MyScriptingContext.Request
SetMyResponse=MyScriptingContext.Response
SetMyServer=MyScriptingContext.Server
SetMySession=MyScriptingContext.Session
EndSub

以后我们就能用在VB中用MyApplication来代替ASP中的Application,同理可以代替Request,Server.....,不过我们来是要在OnStartPage之前来申明这些变量:

PrivateMyScriptingContextAsScriptingContext
PrivateMyApplicationAsApplication
PrivateMyRequestAsRequest
PrivateMyResponseAsResponse
PrivateMyServerAsServer
PrivateMySessionAsSession

使用ASP的对象

我们的变量现在就能像标准的ASP对象来使用了!比如,我们经常在ASP中用Request.form()来收集提交表单的数据.现在我们在我们的VB中实现这个功能,代码如下:

用ASP中实现:
〈%
MyTempVariable=Request.Form("userName")
Response.Write("youentered"&MyTempVariable&"asyourusername")
%>

在VB中实现:

MyTempVariable=MyRequest.Form("userName")
MyResponse.Write("youentered"&MyTempVariable&"asyourusername")

通过使用MyResponse来代替Response,我们能够使用所有Response的方法,当然,MyResponse这个名字可以随便来取,你甚至可以就取Response.
另一件我们得注意的是,我们得在我们的建立的类中,写上OnEndPage子函数,这个OnStartPage是相反的!OnStartPage是创建对象,OnEndPage是消毁对象.

PublicSubOnEndPage()
SetMyScriptingContext=Nothing
SetMyApplication=Nothing
SetMyRequest=Nothing
SetMyResponse=Nothing
SetMyServer=Nothing
SetMySession=Nothing
EndSub

SayHello方法

我们来建立一个子函数,用于显示"HolleWorld".这个SayHello方法只是HelloWorld这个类中一个子函数,我们以后会在ASP中用以下的显示这个方法

〈%
SetObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

SayHello的程序,很简单的!

PublicSubSayHello()
MyResponse.Write("HelloWorld")
EndSub

现在一个小型的组件编写完成,剩下的工作就是编译这个组件,在"工程"菜单中保存它,取什么名字都可以,我们用Exmaple1.vbp吧!然后就用在菜单中选择"makeexmaple1.dll",将其编译成DLL文件.一个组件就真正完成了!

注意,编译了此组件那么你就得先把你的PWS关掉,然后再编译此组件.否则VB就会告诉你些组件在使用中.

在ASP中使用我们的自己的组件.

当你更正了在编译中的错误,成功地编译了example1这个工程,现在你就得拿出你最喜欢的HTML编辑器来写下下面的语句,保存为ASP文件.

〈HTML>
〈HEAD>
〈TITLE>Example1〈/TITLE>
〈/HEAD>

〈BODY>

〈%
SetObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

〈/BODY>
〈/HTML>

运行后即可看到结果:

HelloWorld

注册组件

如果你想和你的朋友,邻居分享你的组件,那么你就得在你的系统上注册你的组件.我们一般使用Regsvr32.exe来注册组件.注册后你的组件会出现在Win95/Win98的windows/system目录中.下面是一个注册的例子:

Regsvr32.exeC:/wwwroot/Example1/Example1.dll

在你的系统中,VB会自动给你注册,所以你很少用到Regsvr32.exe

这里只是写了一个非常小的组件,你可以写好自己的更大的组件,而且还可以用VB中的很多控件.

附录:建立注册DLL和反注册DLL文件的快捷方式
有的程序员经常要注册或者反注册自己写的dll文件,加一个快捷方式会减少自己的工作量:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT/dllfile/shell]

[HKEY_CLASSES_ROOT/dllfile/shell/register]

[HKEY_CLASSES_ROOT/dllfile/shell/register/command]

@="regsvr32 %1"

[HKEY_CLASSES_ROOT/dllfile/shell/Unregister]

"Command"="regsvr32 %1 /u"

[HKEY_CLASSES_ROOT/dllfile/shell/Unregister/command]

@="regsvr32 %1 /u"

当我们需要注册或者反注册dll时,只要在该dll文件上按下鼠标右键即可!

附录注册和注销dll文件的方法:
一个快速注册 DLL 及 OCX 的方法
有时候我们在 VB 中要引用某一个 DLL 或 OCX 时,会出现文件未注册的讯息,这时,我们可以使用人工注册的方法,也就是直接在命令列中使用 regsvr32.exe 来做,做法如下:

文件注册:C:/Windows/System/Regsvr32.exe C:/Windows/System/Test.ocx
取消注册:C:/Windows/System/Regsvr32.exe /u C:/Windows/System/Test.ocx

这些动作我们也可以直接写到程序中,使用 Shell 来执行,但是我现在要说的,都不是上面提到的方法!

1、在资源管理器中找到 C:/Windows/System/Regsvr32.exe 并【复制】 ( 按鼠标右键选复制 )
2、将目录移到 C:/Windows/SendTo 后,执行【贴上快捷方式】 ( 按鼠标右键选贴上快捷方式 )
3、将快捷方式名称改成【REGISTER】
4、OK

现在,如果您想替某一个文件做注册动作,例如:C:/Windows/System/Test.ocx,您只要打开资源管理器,找到 C:/Windows/System/Test.ocx,按鼠标右键选【传送到】【REGISTER】即可完成注册动作了!

注:有一个地方要注意的是,Regsvr32.exe 只能注册 32 位的文件!如果要用它来注册 16 位的文件,会有错误讯息产生。

附录 某些dll文件的功能:
一、轻松修复IE浏览器

  很多经常上网的朋友都有过 这样的遭遇:IE不能打开新的窗口,用鼠标点击超链接也没有任何反应。这时重装IE一般能解决问题。其实不必这么麻烦,使用Regsvr32命令就可以轻松搞定。

  在“开始→运行”中键入“regsvr32 actxprxy.dll”命令,点击“确定”按钮,这时会弹出一个信息对话框“DllRegisterServer in actxprxy.dll succeeded”,点击“确定”;然后再在“开始→运行”中键入“regsvr32 shdocvw.dll”命令,单击“确定”即可。重新启动后IE已经被轻松修复了。

二、解决Windows无法在线升级的问题

  Windows的漏洞很多,每隔一段时间就需要使用“Windows Update”升级程序进行在线升级,不过“Windows Update”经常出现无法使用的情况,这时,我们可以使用Regsvr32来解决这个问题。

  在“开始→运行”中键入“regsvr32 wupdinfo.dll”,点击“确定”按钮,这样在系统中就重新注册了“Windows Update”组件,重新启动后问题已经解决。

三、防范网络脚本病毒有新招

  网络脚本病毒嵌在网页中,上网时在不知不觉中机器就会感染上这种病毒。笔者认为单纯使用杀毒软件并不能有效地防范这些脚本病毒,必须从病毒传播的机理入手。网络脚本病毒的复制、传播都离不开FSO对象(File System Object,文件系统对象),因此禁用FSO对象就能有效地控制脚本病毒的传播。操作方法很简单:

  在“开始→运行”中键入“regsvr32 /u scrrun.dll”就可以禁用FSO对象;如果需要使用FSO对象,键入“regsvr32 scrrun.dll”命令即可。

四、卸载Win XP自带的“鸡肋”功能

  Win XP以功能强大而著称,但有些功能却常常令人有“鸡肋”之感,比如Win XP自带的ZIP功能和图片预览功能,不仅占用了系统资源,功能也远不如第三方软件强大。其实用Regsvr32命令可以很容易地卸载这些功能。

  在“开始→运行”中键入“regsvr32 /u zipfldr.dll”,单击“确定”按钮,弹出卸载成功信息框后就完成了ZIP功能的卸载;要恢复ZIP功能,键入“regsvr32 zipfldr.dll”即可。同样,卸载图片预览功能也很简单,在“开始→运行”中键入“regsvr32 /u thumbvw.dll”即可;如果要恢复该功能,只须键入“regsvr32 thumbvw.dll”。

五、让WMP播放器支持RM格式

  很多朋友喜欢用Windows Media Player(以下简称WMP)播放器,但是它不支持RM格式,难道非得安装其它播放软件吗?笔者有办法。

  以Win XP为例,首先下载一个RM格式插件,解压缩后得到两个文件夹: Release(用于Windows 9x)和Release Unicode (用于Windows 2000/XP);将Release Unicode文件夹下的RealMediaSplitter.ax文件拷贝到“系统盘符/WINDOWS/System32/”目录下;在“开始→运行”中键入“regsvr32 RealMediaSplitter.ax”,点击“确定”即可。接着下载解码器,如Real Alternative,安装后就能用WMP播放RM格式的影音文件了。

附录:注册和反注册dll文件的批处理

dll.bat
------------------------------
@Regsvr32.exe AdminDLL.dll

un.bat
-------------------------------------
@Regsvr32.exe /u AdminDLL.dll

ASP在VB中的封装相关推荐

  1. ASP 调用dll(VB)及封装dll实例

    ASP调用dll及封装dll实例,封装为dll可以提供运行效率,加密代码. 打开VB6,新建ActiveX DLL 2.在工程引用中加入Microsoft Active Server Pages Ob ...

  2. ASP.NET MVC中的模型装配 封装方法 非常好用

    下面说一下 我们知道在asp.net mvc中 视图可以绑定一个实体模型 然后我们三层架构中也有一个model模型 但是这两个很多时候却是不一样的对象来的 就拿微软的官方mvc例子来说明 微软的视图实 ...

  3. ASP.NET MVC中你必须知道的13个扩展点

         ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...

  4. 在Asp.net页面中实现数据饼图

    ASP.NET之所以能够在客户端浏览器中形成各种数据图片,是因为在ASP.NET中提供了绘图功能,具体的作法是先在服务器端创建一个Bitmap实例,然后利用ASP.NET中提供的绘图功能,按照要生成的 ...

  5. 在VB 中调用动态连接库

    在VB 中调用动态连接库   2001-11-08· · ··yesky 1 2 3 4 5 6 7 8  下一页 作为一种简单易用的Windows开发环境,Visual Basic从一推出就受到了广 ...

  6. 在 asp.net mvc中的简单分页算法 (续)

    在上个月发表的 http://www.cnblogs.com/bwangel/p/mvcpager.html 中,讨论了一下asp.net mvc中结合Entity framework框架进行的分页, ...

  7. 如何简单的在 ASP.NET Core 中集成 JWT 认证?

    前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包 自上一 ...

  8. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  9. 如何在 ASP.Net Core 中使用 Serilog

    记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式. 将 ...

最新文章

  1. 原型机拱手让人,飞行器停售,谷歌创始人押注的飞行汽车,如今搁浅
  2. 自动识别文字的编码以及读取所有文本——VB2005
  3. golang中string长度
  4. ui-grid下拉过滤
  5. MUI H5+ APP 分享H5连接 通过scheme唤醒APP
  6. 查看journalnode节点状态信息_OpenStack Cinder服务状态排错
  7. 数据结构整理中。。。
  8. c#选择文件保存路径
  9. Mycat的简单使用(三)【分库分表】
  10. html5页面弹窗,H5页面怎么设置弹窗
  11. JavaScript动画案例——筋斗云,手风琴,固定导航栏
  12. JAVA数据类型的划分
  13. Java小项目(一):桌球游戏(简单移动)
  14. arch Linux安装到U盘,把Arch Linux安装到U盘上的具体教程
  15. python爬取豆瓣排行榜电影(静态爬取)(二次爬取)
  16. CY7C68013A的惊天大秘密:实现对全速和高速模式的切换
  17. Ubuntu16.04系统之 - 安装搜狗输入法出现破坏fcitx-ui-qimpanel问题
  18. 学术会议报告PPT设计及内容注意事项
  19. 关于TCP协议的端口(port)
  20. 论如何做好一个大型数据项目:软实力和硬实力

热门文章

  1. 重启oracle ora-01033,解决连接ORACLE错误一例:ORA-01033: ORACLE 正在初始化或关闭 | 学步园...
  2. 京东承认刘强东涉案!
  3. jvm中的PermSize、MaxPermSize
  4. 悬赏任务兼职众人帮蚂蚁帮扶任务平台
  5. 环境设计与计算机表现,【环境艺术设计论文】环境艺术设计手绘表现技法分析(共2224字)...
  6. 更新微软Edge后,发现NewBing边栏快捷插件没有了,新bing侧边栏,侧边栏快捷键
  7. linux mysql source命令_Linux下source命令详解
  8. 运维--域控服务器--策略配置
  9. pycharm远程开发上传文件No files or folders found to process
  10. JAVA毕设项目慧学IT精品课程网站(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)