在asp编写类

本文介绍了如何在ASP中编写数据库操作类,包括连接数据库、执行SQL语句、处理结果集等功能,帮助开发者更高效地进行数据库交互。

<%
'在 Class 块中,成员通过相应的声明语句被声明为 Private(私有成员,只能在类内部调用) 或 Public(公有成员,可以在类内外部调用) 。被声明为 Private 的将只在 Class 块内是可见的。被声明为 Public 不仅在 Class 块的内部是可见的,对 Class 块之外的代码也是可见的。没有使用 Private 或 Public 明确声明的被默认为 Public。在类的块内部被声明为 Public 的过程(Sub 或 Function)将成为类的方法。Public 变量将成为类的属性,同使用 Property Get、Property Let 和 Property Set 显式声明的属性一样,可以设置。类的缺省属性和方法是在它们的声明部分用 Default 关键字指定的。

dim syy
set syy=new test
syy.setname="李小龙"
syy.setgender="男"
syy.setage="32"
response.write syy.output
syy.printMethod
response.write syy.myresult
response.write"以下是public变量作为属性使用的测试--------<BR><BR>"

syy.syyname="重新设置syyname"
response.write syy.syyname&"<BR>"
response.write syy.syygender&"<BR>"
response.write syy.syyage&"<BR>"

set syy=nothing

Class test
 Public syyname
 Public syygender
 Public syyage

 private strName
 private strGender
 private strAge
 
 Public Property Let setName(n)
 strName=n
 End Property

 Public Property Let setGender(n)
 strGender=n
 End Property

 Public Property Let setAge(n)
 strAge=n
 End Property

 Public Property Get output
  output="我的名字是"&strName&",我的年纪是"&strAge&"岁了,我的性别是"&strGender&"。谢谢您提供数据!<BR>"
 End Property

 Public Sub printMethod
  response.write "以下是方法------------<BR>"
  response.write output
  response.write "方法结束-------------<BR>"
 End Sub

 Public Function myresult
  myresult="<BR><BR><BR>"&out&"--这个可是函数<BR><BR><BR>"
 End Function

 Public Sub Class_initialize
  'response.write "<script>alert('im syy')</script>"
  syyname="my name is test2"&strname
  syygender="my gender is test3"&strgender
  syyage="my age is test6"&strage
 End Sub
End Class
%>

本文说明如何在ASP中使用类和对象。
========================================================

本文我将说明如何在ASP中使用类和对象。首先,必须先了解一下什么是类和对象。

类和对象:
关于类定义的说明有好几种。我认为可以简单地定义为,类是一种提供特定方法的数据类型。[译者注:C++刚从C衍生出来的时候,类被定义为”带方法的结构“。我认为用”封装的数据(成员、属性、方法)集合“可能更贴切。]
对象(或者类的实例)可以被描述为使用由类提供的方法的变量。[译者注:对象和实例略有不同。使用指针或引用自身时,不可作为实例。]

如何在ASP中使用类呢?
首先要建立类。作为例子,下面建立一个超链接的类。这个例子没有什么意义,我只是用它说明如何建类。
1: Class Navigation
2:  Public nav_url
3:  Public nav_title
4:
5:  Public Property GET nav_link
6:
7:   nav_link="<a href=" & chr(34) & nav_url & chr(34) & ">" & nav_title & "</a>"
8:
9:  END Property
10:
11: END Class

类由关键字Class起头,后面跟随类的名字,本例中是Navigation。第二行和第三行定义了二个变量,它们被声明为公共变量,可以让类外的函数调用。如果要限制变量只能在类里面使用,就要把变量声明为私有(Private)类型。

随后的代码声明了一个公共属性(Public Property)。这里的属性设定是让外部函数读取类的属性值。
属性(Property)有三个参数:
1、Property Let:外部函数设置类的属性值。
2、Property Set:Get方法的特例。
3、Property Get:外部函数读取类的属性值。

在本例中,属性段代码用类的二个变量构造成超链接字符串。属性声明用End Property结尾。
最后是类结束标记End Class。
代码中Chr(34)是双引号。

至此,我们建立了一个类。但如何在ASP文件中使用它呢?
要使用类,先要把这样的代码放在ASP脚本文件里,作为源文件或包含文件。然后要建立一个对象。
下面我们建立一个类的对象:
1: Dim objHyperLink
2: Set objHyperLink = New Navigation
执行Set objHyperLink = New Navigation指令时,就创建了一个类的对象或实例。

要得到超链接,先要给对象的变量赋值:
1: objHyperLink.nav_url = "http://www.askasp.com"
2: objHyperLink.nav_title = "codeanimal - for the new breed of developer"
对象的变量由对象名 + "." + 类成员名组成,就是这里的objHyperLink.nav_url和objHyperLink.nav_title。对象将用属性objHyperLink.nav_link返回超链接字符串。

输出:Response.Write objHyperLink.nav_link或在HEML语言里使用<%= objHyperLink.nav_link %>。

[译者注:最后别忘了在ASP文件中析构对象 - Set objHyperLink = Nothing]

好了,希望你们已经能够初步掌握ASP中的类和对象。
下一篇文章,我将说明如何使用类与数据库建立连接,这是ASP中的重要议题之一。将来我还要说明类的继承和多态性以及如何在ASP中使用。


ASP应用中最重要的事情之一就是数据库连接。谈到数据库连接,首先考虑到是连接速度和安全性。但最终起决定性的因素是使用的方便性。
========================================================
高级应用-数据库连接

ASP应用中最重要的事情之一就是数据库连接。谈到数据库连接,首先考虑到是连接速度和安全性。但最终起决定性的因素是使用的方便性。

ASP中的数据库连接由二部分组成:
a) 连接数据库
b) 建立纪录集合(Recordset)

数据库连接过程如下:
1: dim objDBConnection
2: Set objDBConnection = Server.CreateObject("ADODB.Connection")
3: objDBConnection.Provider="Microsoft.Jet.OLEDB.4.0"
4: objDBConnection.Open Server.MapPath("./") & "/PATH/DATABASENAME.mdb;"

这是数据库连接代码。使用简单的DSN-less方式连接到MS Access数据库。第二句代码创建了连接对象objDBConnection。第三句代码指明由Microsoft Jet-Database Provider[译者注:Access的驱动器]提供连接。最后用Open建立与数据库的连接。

创建纪录集合对象:
1: dim objRecSet
2: Set objRecSet = Server.CreateObject("ADODB.RecordSet")
3: thisSQL = "SELECT ..."
4: objRecSet.open thisSQL,objDBConnection, adOpenDynamic, adLockPessimistic

第二句代码创建了纪录集合对象(objRecSet)。在打开纪录集合对象前要写好数据库查询语句(SQL)。通过纪录集合就可以访问数据库查询结果。

我在本文的第一部分说明了如何在ASP中建立类和对象。类的主要任务之一是它的可重用性。类的可重用性的好坏取决于程序员以及如何萃取问题的关键。一个好的类可以被许多程序员所用。

首先,我们需要:
数据库名字(和相应的表名)
数据库路径
SQL语句

由此,我们建立这样的类:
 1: Class cls_Database
 2:
 3:  Public db_name
 4:  Public db_path
 5:  Public tbl_name
 6:  Public qry_sql
 7:
 8:  dim obj_dbconn
 9:  dim obj_recSet
10:  dim sql_string
11:
12:  Public Property GET this_RsArray
13:
14:   Set obj_dbconn = Server.CreateObject("ADODB.Connection")
15:   obj_dbconn.Provider="Microsoft.Jet.OLEDB.4.0"
16:   obj_dbconn.Open Server.MapPath("" & db_path & db_name & "")
17:
18:   Set obj_recSet = Server.CreateObject("ADODB.RecordSet")
19:   sql_string = qry_sql
20:   obj_recSet.open sql_string,obj_dbconn, adOpenDynamic
21:
22:   this_RsArray = obj_recSet.GetRows()
23:
24:   obj_recSet.Close
25:
26:   obj_dbconn.Close
27:
28:  END Property
29:
30: END Class

本例同样使用DSN-LESS连接方法连接到Access数据库。

cls_Database类的结构:
类的开始定义了几个公共成员:
- db_name = 数据库名或数据库文件
- db_path = 数据库路径
- tbl_name = 表名
- qry_sql = SQL查询语句

给成员赋值之后,就可以打开数据库和创建纪录集。可以看到,做法与上面的例子是一样的。
但也有了新的做法:
22: this_RSArray = obj_recSet.GetRows()
...

纪录集通过GetRows()方法将纪录值传递给this_RSArray数组,让你的ASP文件可以访问。这是个二维数组,第一维是表的域名,第二维是查询结果。

类的用法:
1:  Dim obj_dbtest
2:  Set obj_dbtest = New cls_Database
3:
4:  obj_dbtest.db_name = "thistest.mdb"
5:  obj_dbtest.db_path = "./"
6:  obj_dbtest.qry_sql = "SELECT * FROM test_table"

所有的事情都离不开对象 ;o) - 所以我们建立一个新的对象obj_dbtest。下面的代码说明如何显示纪录。
 1: <table border="1">
 2:
 3: <%
 4:  this_array = obj_dbtest.my_recSet
 5:
 6:  dim dsCounter
 7:
 8:  for dsCounter = 0 to UBOUND(this_array, 2)
 9:
10:   fld_field1 = this_array(0,dsCounter)
11:   fld_field2 = this_array(1,dsCounter)
12:   fld_field3 = this_array(2,dsCounter)
13:   fld_field4 = this_array(3,dsCounter)
14: %>
15:
16: <tr>
17:  <td><%= fld_field1 %></td>
18:  <td><%= fld_field2 %></td>
19:  <td><%= fld_field3 %></td>
20:  <td><%= fld_field4 %></td>
21: </tr>
22:
23: <% Next %>
24:
25: </table>

cls_Database类的查询结果转换到外部数组(this_array),通过它将查询结果显示在表中。变量dsCounter是纪录集的循环变量。UBOUND函数得到数组的上限值,也就是循环结束标志。为便于说明,我把数组值转换成变量,你也可以直接使用数组值。
最后,把结果写入表中。

我确实想写些类的继承和多态性。不过现在这些也够用了。我以为用这种方法访问数据库是简单而实用的。以后的文章我要说明”外部“数组的一些特殊用法。

 
7:57 |  固定链接 | 引用通告 (0) | 记录它
asp的类(规范代码)
asp的类(规范代码)
  2004-5-4  

 



<Script language="VBScript" runat="server">

 

Class DataBase ' 操作数据库对象
Public gDBConnStr '定义连接字符串
Public gConn '定义连接对象
Public gRs '定义记录集
Public gRsWebSite '定义记录集分站

'实例化对象初始化
Private Sub Class_Initialize
On Error Resume Next
Set gConn=Server.CreateObject("ADODB.Connection")
gConn.open "xinyzshop","sa","9ComU&ji818SD32fgPk"
If Err.Number <> 0 Then
Response.write "数据库链接出错!"
Response.End()
End If
End Sub

'查询记录总数
Public Function getRecordCount(sSql)
On Error Resume Next
Dim CountNum,gRs
Set gRs = Server.CreateObject("ADODB.Recordset")
gRs.Open sSql,gConn,1,1
If Not gRs.Eof Then
CountNum = gRs.RecordCount
gRs.close
If CountNum > 0 Then
getRecordCount = CountNum
Else
getRecordCount = 0
End If
Else
getRecordCount = 0
End If

If Err.Number <> 0 Then Err.Clear()
End Function

'执行sSql语句
Public Function RunSql(sSql)
On Error Resume Next
gConn.Execute(sSql)
If Err.Number <> 0 Then
RunSql = False
Response.Write err.number & err.description
Else
RunSql = True
End If
End Function

'返回记录集
Public Function GetRecordSet(sSql)
On Error Resume Next
Set gRs = Server.CreateObject("ADODB.Recordset")
gRs.Open sSql,gConn,3,1
GetRecordSet = gRs
If Err.Number <> 0 Then Err.Clear()
End Function

 

'实例化对象终止
Private Sub Class_Terminate
Set gRs = Nothing
set gRsWebSite = nothing
Set gConn = Nothing
End Sub
End Class

Class StringObject '字符串对象
'实例化对象初始化
Private Sub Class_Initialize
End Sub

'实例化对象终止
Private Sub Class_Terminate
End Sub

Rem 过滤Sql非法字符
Function checkSql(str)
If isnull(str) then
checkSql = ""
Exit function
End If
checkSql=replace(str,"'","''")
End function

'检测字符是否在什么的范围内
Public Function IsValidRegExp(str,Patrn)
Dim Re
Set Re = New RegExp
Re.Pattern = Patrn
Re.IgnoreCase = True
IsValidRegExp = Re.Test(str)
End Function

'检测字段是否为空值
Public Function IsFieldNull(str)
Dim Flag
Flag = True
If (Not IsEmpty(str)) and (Len(trim(str)) > 0) Then
Flag = False
End If
IsFieldNull = Flag
End Function

'出现错误窗口
Public Sub Error(ErrorStr)
Response.write("<table width=80% border=0 align=center cellpadding=4 cellspacing=2 bgcolor=efefef>")
Response.Write("<tr>")
Response.write("<td height=22 align=center><strong style=""font-size:14px"">错 误 窗 口</strong></td>")
Response.Write("</tr>")
Response.write("<tr>")
Response.Write("<td height=140 bgcolor=ffffff valign=top style=""font-size:14px"">" + ErrorStr + "</td>")
Response.write("</tr>")
Response.write("<tr>")
Response.write("<td height=22 align=center>")
Response.Write("<a href=""Javascript:history.back()"" style=""font-size:14px"">返回上一页</a>")
Response.Write("   ")
Response.Write("<a href=""Javascript:self.close()"" style=""font-size:14px"">关闭窗口</a>")
Response.Write("</td>")
Response.write("</tr>")
Response.Write("</table>")
Response.End()
End Sub

'取出N个字符串
Public Function LeftString(str,N)
If Len(str) > N Then
str = Left(str,N)
End If
LeftString = str
End Function

Rem 过滤HTML代码
Public Function HtmlAn(str)
If not isnull(str) then
str = Replace(str, ">", ">")
str = Replace(str, "<", "<")
str = Replace(str, CHR(32), " ")
str = Replace(str, CHR(9), " ")
str = Replace(str, CHR(34), """)
str = Replace(str, CHR(39), "'")
str = Replace(str, CHR(13), "")
str = Replace(str, CHR(10) & CHR(10), "</font></P><P style=""font-size:"&FontSize&"pt;line-height:"&FontHeight&"pt"">")
str = Replace(str, CHR(10), "<BR> ")
HtmlAn = str
End If
End function
End Class
</Script>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值