1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

在asp编写类

本帖由 小叶2006-02-21 发布。版面名称:后端开发

  1. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    from:csdn.net
    <%
    '在 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函数得到数组的上限值,也就是循环结束标志。为便于说明,我把数组值转换成变量,你也可以直接使用数组值。
    最后,把结果写入表中。
    我确实想写些类的继承和多态性。不过现在这些也够用了。我以为用这种方法访问数据库是简单而实用的。以后的文章我要说明”外部“数组的一些特殊用法。
     
  2. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    代码没有缩进,阅读起来吃力。

    :(
     
  3. Tameway

    Tameway New Member

    注册:
    2005-09-06
    帖子:
    1,286
    赞:
    8
    这个是VBB的缺陷
    没有把空格转换成&nbsp;存储
     
  4. 布丁龙

    布丁龙 New Member

    注册:
    2006-02-20
    帖子:
    4
    赞:
    0
    拜求ASP这方面的资料,我现写的类都是引用式,不会继承。搞得代码臃肿得要死。:(