简化你的ASP编写工作 (原数据库操作类clsdbCtrl.asp)

80酷酷网    80kuku.com

  首先,认为ASP已经过时的人,请忽略此帖,谢谢。俺这里只是提供一种思路,希望能给很多还在学习和使用ASP的朋友一种方便。尽管俺现在也很少用ASP了,但俺相信只要能满足应用,就没有什么过时不过时的,也许它的语言没那么高级,但做出来的应用不一定就低级,呵呵。

    EasyASP是一个方便快速开发ASP的类,其中包含了一个数据库控制类(原clsDbCtrl.asp,对原代码作了优化和修改,包含对数据库的各类操作及存储过程的调用,全部封装在Easp.db中,使用起来会更方便,调用也更简单)。而Easp类中提供了大量实用的ASP通用过程及方法,可以简化大部分的ASP操作。目前只提供了VBScript版,JScript版将来可能会提供。详细说明请下载帮助手册,里面有非常详细的使用方法说明及源码范例。

    后续更新请关注:

=================================================================
EasyASP v1.5 (2008-10-22更新)

新增功能:
1、将数据库控制类(原clsDbCtrl.asp)封装入Easp类,均通过Easp.db调用,也可独立使用。
2、新增MSSQL存储过程调用方法,可灵活调用存储过程并返回返回值、记录集及出参。
3、新增db.CreatConn方法,可以根据自定义的连接字符串连接数据库。
4、新增db.Json方法,可以将数据库记录集按Json格式输出。
5、新增db.Rand和db.RandStr方法,可以生成一个不重复的随机数或者随机字符串
6、新增数据库操作各方法的简写方法,更节约书写代码时间。
7、在Easp类中新增大量的实用方法,如安全获取值、防Sql注入、服务器端表单验证等。

其它更新:
1、优化db.AutoId自动获取编号,效率提高20倍以上,数据量越大越明显。
2、修改db.OpenConn数据库连接方法,更符合日常描述习惯。
3、修改db.GetRecord取记录集方法,参数更少。修正条件使用数组报错的Bug。
4、修改并优化db.DeleteRecord删除记录方法,目前只有两个参数了。
5、修改了错误调试方法,增加Debug全局属性控制错误显示。

更新说明:
    以前写了一个clsDbCtrl.asp数据库控制类(《》),收到一些反馈,还有朋友发来邮件告诉我一些改进的方法,很感谢他们。而我在原帖的跟帖中看到一条留言说“有记参数的时间,SQL语句早都写完了”,更是直接指出了其中的尴尬,的确,尽管VBS没有arguments属性,但用太多的参数也不是个好主意。所以我花了些时间把这个类的许多代码都重写了一下,在保证功能只能更强不能更弱的前提下,一个方法最多只有3个参数了。另外新增加了一个调用MSSQL存储过程的方法,可以灵活的调用存储过程并根据需要返回一个或多个记录集、输出参数及返回值,当然,吸取教训了,这个方法只有两个参数。现在都封装在这个新的名叫EasyASP的家伙中了,顾名思义,无非是想一切都简单点。
    另外还有一个更尴尬的,那就是VBScript并不是面向对象的语言,所以这个类其实说穿了也只是一些过程和方法的封装,方便使用而已,所以其中大部分的方法和过程都可以提出来单独使用。当然,如果有需要,也可以把它封装成wsc或者dll组件使用。

=================================================================
使用说明
=================================================================

1、使用方法:
(1) Easp类的所有调用都已包含在easp.asp中,所以只需要在页首引入该文件,如: 复制内容到剪贴板

代码:
<!--#include file="inc/easp/easp.asp" -->或: 复制内容到剪贴板
代码:
<!--#include virtual="/inc/easp/easp.asp"-->(2) 该类已经实例化,无需再单独实例化,直接使用Easp.前缀调用即可,如: 复制内容到剪贴板
代码:
Easp.wn("Test String")  或  Easp.db.AutoId("Table:ID")(3) 如要同时操作多个数据库,请实例化新的easpdb对象,如: 复制内容到剪贴板
代码:
Dim db2 : Set db2 = New EasyASP_db
  db2.dbConn = db2.OpenConn(0,dbase,server)
2、参数约定:
(1) 数组参数:由于VBScript没有arguments属性,不能使用动态参数,所以,在本类涉及到数据库数据的代码中,使用了Array(数组)来达到这一效果。本类中的部分参数可以使用数组(参数说明中有注明),但使用数组时应参照以下格式: 复制内容到剪贴板
代码:
Array("Field1:Value1", "Field2:True", "Field3:100") 对,有点像json的格式,如果涉及到变量,那就这样: 复制内容到剪贴板
代码:
Array("Field1:" & Value1, "Field2:" & Value2, "Field3:" & Value3)可以这样说,本类中的几乎所有与数据库字段相关的内容都可以用以上的数组格式来设置条件或者是获取内容,包括调用存储过程要传递的参数。而这个类里最大的优点就是在使用时不用去考虑字段的类型,在字段后跟一个冒号,接着跟上相应的值就行了。如果你经常手写ASP程序的话,你很快就会感受到运用这种方式的魅力,除了数据类型不用考虑之外,它也很方便随时添加和删除条件。这里举个例子说明这个用法:
比如添加新记录的方法: 复制内容到剪贴板
代码:
Easp.db.AddRecord "Table", Array("FieldsA:测试数据","FieldsB:"&Now(),"FieldsC:True")参数只有两个,一个是表名,另一个就是这样的数组参数。如果要改变数据库结构,则修改上面的程序代码就非常简单了。

(2) 共用参数(用特殊符号分隔): 也是考虑到要尽量减少参数,如果有些参数在很多时候都可以没有的话,那就没有必要专门为它增加一个参数。在本类里采用了特殊符号如冒号(分隔一个参数中的多个值来达到传递多个参数的效果。举几个例子说明一下,同时也可以预览一下采用本类的一些优势:

比如建立MSSQL数据库连接对象的方法: 复制内容到剪贴板
代码:
Set Conn = Easp.db.Open(0,"Database","User:PasswordServerAddress")很一目了然对不对,这里就用:和分隔了几个参数而放在同一个参数里了。另外如果是Access数据库有密码则在第3个参数中输入就行了,没有其它参数了。
再比如获取记录集的方法: 复制内容到剪贴板
代码:
Set rs = Easp.db.GetRecord("Table:FieldsA,FieldsB,FieldsC:20","ID > 10","ID Desc")其中第1个参数中包含了表名,要取的字段和要取的记录数,因为字段和记录数很多时候是可以省略的,所以俺索性把参数也省略了,这样要记的参数要少很多滴。
再比如本类里有一个GetUrl()的获取本页面地址的方法,很多地方都见过是吧,但是本类里这个方法带一个参数,通过这个参数可以取得很多结果,看例子:
    比如本页面的实际地址为: 复制内容到剪贴板
代码:
http://www.domain.com/news/index.asp?type=public&feed=on&page=23接下来是使用不同参数返回的结果: 复制内容到剪贴板
代码:
    方法              返回结果
    GetUrl("")        http://www.domain.com/news/index.asp?type=public&feed=on&page=23
    GetUrl(0)         /news/index.asp
    GetUrl(1)         /news/index.asp?type=public&feed=on&page=23
    GetUrl("page")    /news/index.asp?page=23
    GetUrl("-page")   /news/index.asp?type=public&feed=on
    GetUrl(":")       /news/?type=public&feed=on&page=23
    GetUrl(":-feed,-page")  /news/?type=public

无需更多说明了吧,呵呵。本类中灵活使用共用参数的地方还有很多,这也是EasyASP的一大特色,大家自己看手册吧。

方法和属性概览:
(1) 数据库操作:
属性:
Easp.db.dbConn             (读写) 设置和获取当前数据库连接对象
Easp.db.DatabaseType       (只读) 查询当前使用的数据库类型
Easp.db.Debug              (读写) 设置和查询错误调试开关
Easp.db.dbErr              (只读) 查询错误信息
方法:
Easp.db.OpenConn           根据模板建立数据库连接对象
Easp.db.CreatConn          根据自定义字符串建立数据库连接对象
Easp.db.AutoID             根据表名获取自动编号
Easp.db.GetRecord          根据条件获取记录集
Easp.db.wGetRecord         输出获取记录集的SQL语句
Easp.db.GetRecordBySQL     根据自定义SQL语句获取记录集
Easp.db.GetRecordDetail    获取某一记录的详细信息
Easp.db.AddRecord          添加一条新的记录
Easp.db.wAddRecord         输出添加新记录的SQL语句
Easp.db.UpdateRecord       根据条件更新记录
Easp.db.wUpdateRecord      输出更新记录的SQL语句
Easp.db.DeleteRecord       根据条件删除记录
Easp.db.wDeleteRecord      输出删除记录的SQL语句
Easp.db.ReadTable          根据条件获取指定字段数据
Easp.db.Json               根据记录集生成Json格式数据
Easp.db.doSP               调用一个存储过程并返回多种数据
Easp.db.Rand               生成一个不重复的随机数
Easp.db.RandStr            生成一个不重复的随机字符串
Easp.db.C                  关闭记录集并释放资源

(2) 字符串处理:
Easp.w                     输出字符串
Easp.wn                    输出字符串和一个HTML换行("<br/>")
Easp.we                    输出字符串并终止程序
Easp.isN                   判断字符串是否为空值
Easp.js                    输出JavaScript代码
Easp.alert                 弹出js消息框并返回上页
Easp.alertUrl              弹出js消息框并跳转到新页
Easp.jsEncode              转换字符串为安全的JavaScript字符串
Easp.CutString             截取字符串并以自定义符号代替被截部分
Easp.HtmlEncode            HTML加码函数
Easp.HtmlDecode            HTML解码函数
Easp.HtmlFilter            过滤HTML标签
Easp.RandStr               生成指定长度的随机字符串
Easp.R                     获取Request值并转换为SQL安全字符串
Easp.Ra                    安全获取Request值并在错误时弹出js消息框
Easp.Test                  根据正则表达式验证数据合法性

(3) 时间日期处理:
Easp.DateTime              格式化时间日期
Easp.DiffHour              返回一个日期时间变量和现在相比相差的小时数
Easp.DiffDay               返回一个日期时间变量和现在相比相差的天数
Easp.GetScriptTime         根据时间戳返回精确到毫秒的脚本执行时间

(4) 数字处理:
Easp.Rand                  生成一个随机数
Easp.toNumber              转换数字为指定小数位数的格式
Easp.toPrice               转换数字为货币格式
Easp.toPercent             转换数字为百分比格式

(5) Cookie及Application处理:
Easp.SetCookie             设置一个Cookies值
Easp.GetCookie             获取一个Cookies值
Easp.RemoveCookie          删除一个Cookies值
Easp.SetApp                设置一个Application值
Easp.GetApp                获取一个Application值
Easp.RemoveApp             删除一个Application值

(6) 其它:
Easp.IfThen                判断三元表达式
Easp.rr                    服务器端跳转页面
Easp.GetUrl                获取当前页面的URI地址
Easp.GetIP                 获取访问者IP
Easp.noCache               设置页面不缓存
Easp.close                 关闭对象并释放资源
Easp.CheckForm             服务器端表单验证不合法弹出js消息框
Easp.CheckDataFrom         验证提交数据来源
Easp.CheckDataFromA        验证数据来源不合法则弹出js消息框
Easp.CheckSql              防SQL注入强验证
Easp.CheckSqlA             防SQL注入强验证不合法则弹出js消息框
以下是引用片段:
Easp.db.doSP 方法

调用一个SQL存储过程并返回数据

语法

[[Set ]obj = ][Easp.]db.doSP(spName:spType, spParams)

参数

obj 
      存储过程返回的值、输出参数集合或记录对象 
spName 
      要调用的存储过程名称 
spType 
      要调用的存储过程的类型,可以是以下值: 
      0 或者 省略 - 没有参数或者只有输入参数的存储过程 
      1 或者 "OUT" - 带有输出参数的存储过程 
      2 或者 "RS" - 没有输出参数且返回一个或多个记录集的存储过程 
      3 或者 "ALL" - 既有输出参数又返回一个或多个记录集的存储过程 
spParams 
      要传递给存储过程的输入或输出参数,如是数组应遵循"数组参数约定"(稍有不同,请看示例)。 
      在数组中参数的名称中请遵循以下格式: 
      输入参数 : +参数名+冒号(:)+值 
      输出参数 :+参数名 
      注意:参数的顺序要同存储过程中的顺序完全一致 

注释

调用此方法将调用一个MS SQL Server的存储过程并可返回一个或多个记录集、输出参数或返回值。返回的值可能是对象、数组或字符串,详细请看以下的示例。 

示例

由于存储过程内容不同,返回数据的不同,输入输出参数要求的不同,所以从几种情况来看用此方法调用存储过程:

1、没有输入输出参数,不返回记录集的存储过程的调用: 
复制内容到剪贴板 
代码:
Dim mySP
mySP = Easp.db.doSP("myTestSP","")
Easp.w mySP ’输出返回值
2、仅有输入参数,无输出参数,不返回记录集的存储过程的调用: 
复制内容到剪贴板 
代码:
mySP = Easp.db.doSP("myTestSP",Array("param1:" & Value1, "param2:" & Value2))
’或者用更简单的方式,只把值作为Array参数的项目即可(仅应用于这一种情况):
’mySP = Easp.db.doSP("myTestSP",Array(Value1,Value2))
Easp.w mySP ’输出返回值
3、有或者没有输入参数,有输出参数,不返回记录集的存储过程的调用: 
复制内容到剪贴板 
代码:
Set mySP = Easp.db.doSP("myTestSP:1",Array("inParam1:" & Vlaue1,"inParam2:" & Value2, "outParam1", "outParam2"))
Easp.wn mySP("return") ’输出返回值
Easp.wn mySP("outParam1") ’输出指定的输出参数值
Easp.close(mySP)
4、有或者没有输入参数,无输出参数,只返回记录集的存储过程的调用: 
复制内容到剪贴板 
代码:
Set mySP = Easp.db.doSP("myTestSP:2",Array("param1:" & Value1, "param2:" & Value2))
While Not mySP.Eof ’输出记录集内容
    Easp.wn "ID:" & mySP(0)
    Easp.wn "Name:" & mySP(1)
    mySP.moveNext()
Wend
Easp.db.C(mySP)
5、有或者没有输入参数,有输出参数,也要返回记录集的存储过程的调用: 
复制内容到剪贴板 
代码:
mySP = Easp.db.doSP("myTestSP:3",Array("inParam1:" & Vlaue1,"inParam2:" & Value2, "outParam1", "outParam2"))
’mySP返回的将是一个数组,第一个元素是记录集对象,第二个元素是参数和返回值
Dim rs : Set rs = mySP(0)
’这里可以操作rs记录集对象了
’... ...
Easp.wn mySP(1)("return") ’输出返回值
Easp.wn mySP(1)("outParam2") ’输出指定参数值
再次提醒注意:参数的顺序要同存储过程中的顺序完全一致。但参数名没有强制要求要和存储过程中一样,只是为了代码便于阅读,建议你这么做(输出参数除外,因为这里需要两个,存储过程中只需要一个)。

另外,如果你要返回多个记录集对象,可以用这种方式来对获取的多个记录集进行操作: 
复制内容到剪贴板 
代码:
Set rs = Easp.db.doSP("myTestSP:rs",Array("param1:" & Value1, "param2:" & Value2))
While Not rs.Eof ’输出记录集内容
    Easp.wn "ID:" & rs(0)
    Easp.wn "Name:" & rs(1)
    Easp.wn "-----"
    rs.moveNext()
Wend
Easp.wn "==== Next Recordset ===="
Set rs = rs.NextRecordset() ’获取下一个记录集
While Not rs.Eof
    Easp.wn "ProductID:" & rs(0)
    Easp.wn "Photo:" & rs(1)
    Easp.wn "-----"
    rs.moveNext()
Wend
Easp.db.C(rs)

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: