将ASP代码移植为VB COM组件(2)

翻译|其它|编辑:郝浩|2004-02-18 12:17:00.000|阅读 1365 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

一个快速回答的问题:为什么关于ASP的书中,讨论使用子程序和函数的代码的那么少?



     虽然一行一行地写ASP代码要更加简单,但是以程序的形式来编码却有许多益处。



     首先,非程序化的代码不容易移植到Visual Basic。也许目前你没有这个计划,但是总有一天你会为了

其性能或可扩展性而将一些代码移植到组件中。



     其次是程序是运行得更快。对ASP性能的最大消耗是上下文转换,每次从ASP代码区< % % > 移到无格式的

HTML时都会发生。因为你不会在程序内部编码一个上下文转换,就不讳感觉到这种消耗。另外,ASP的

缓冲器也显示当子程序用程序化代码点击页面时会有很大的不同。这里是使用程序化代码的ASP应用程序

"Hello World" 的必须部分:



     Private Sub Main() 

     Response.Write "Hello World!" 

     End Sub 



     Call Main



     为了完整起见,我在程序中包含了一个上下文转换的小例子。如果你试验这个代码,它会运行,但是请

不要在你自己的应用程序内部这样做。



     < %@ Language=VBScript % >

     < % 

     Private Sub DoStuff()

     % >

     This is < b > HTML Text! < /b >

     < %

     End Sub

     % >

     < HTML >

     < HEAD >

     < META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0" >

     < /HEAD >

     < BODY >

     < P >< % Call DoStuff % >< /P >

     < /BODY >

     < /HTML >



     程序化的代码还有一些其它益处。首先你会发现再利用包含在程序中的代码部分更加容易。其次,要

实现同样的目的所需要的代码行更少。第三,你将要开始开发一个大的可再利用代码库。开始时它的

形式是.inc 文件,最后你自己的普通COM组件看起来就像Jeff Gordon(著名赛车选手)一样棒。



     移植你的代码



     有几件事与从VBScript向Visual Basic移植代码一样简单。一般来说,你需要移走代码并增加数据类型。

有时,也可以在Visual Basic中应用一些更有效的算法,但是必须先保证代码可以正常工作。



     在我们这个应用程序举例中,将要移植一些简单的代码到两个Visual Basic COM 组件中。将一些HTML

表格格式拖到表述类中,将ADO 对象代码拖到包裹了ADO 的数据存取类中。通过将这两个类都放入

ActiveX DLL 工程文件中可以使工程文件稍稍简单化。在实际工作中,可以为每一层创建单独的工程

文件,但是这个工程文件要在一个DLL中表明思路。如果你想纠正这种情况,就将数据存取类移到另一个

工程文件中并作为一个DLL编译。必须在表述要应用它的DLL工程文件中增加对这个新DLL的引用。



     在这个样本工程文件中使用的数据库是一个Northwind 数据库,它与Visual Basic包含在一起。在这个

样本工程文件的ZIP 文件中,我为那些没有安装Visual Basic的人做了这个文件的一个表格的版本。样本

工程文件中还包含一个与ASP代码一起使用的编译过的DLL。


这个例子中的第一站是ASP页。这个ASP页用ADO与Northwind 数据库连接。为了保持良好的编码习惯,我

使用了Option Explicit 并明确地声明了所有变量。这个ASP页的第一个草稿使用了内联代码。

< % @ LANGUAGE=VBScript % >

< %

'Example of Inline code

Option Explicit



'Declare variables

Dim oConn 

Dim oRS 

Dim ConnectionString 

Dim x 



ConnectionString = "DSN=Northwind;"



Set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open ConnectionString



Set oRS = Server.CreateObject("ADODB.Recordset")



'Set variables

oRS.ActiveConnection = oConn

oRS.Source = "Select * from Products"

oRS.Open

% >

< html >

< head >

< meta http-equiv="Content-Type" content="text/html; charset=windows-1252" >

< title >New Page 1< /title >

< /head >

< body >

< h1 >Products< /h1 >

< table cellspacing="2" cellpadding="5" >

< tr bgcolor="#FF6666" >

< th >Product Name< /th >

< th >Quantity Per Unitr< /th >

< th >Price< /th >

< /tr >

< % 

Do until oRS.EOF

If x = 1 then

x = 0

% >

< tr bgcolor="#ffcccc" >

< % else % >

< tr >

< % 

x = 1

end if 

% >

< td >< %=oRS("ProductName")% >< /td >

< td >< %=oRS("QuantityPerUnit")% >< /td >

< td >< %=oRS("UnitPrice")% >< /td >

< /tr >

< %

oRS.MoveNext

Loop

% >

< /table >

< /body >

< /html >

< %

'Destroy objects

Set oRS = Nothing

Set oConn = Nothing

% >


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP