收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 18984|回复: 33

[asp] EasyASP v1.5 发布,简化你的ASP编写工作 (原数据库操作类clsdbCtrl.asp)

[复制链接]
发表于 2008-10-23 12:23:48 | 显示全部楼层 |阅读模式
首先,认为ASP已经过时的人,请忽略此帖,谢谢。俺这里只是提供一种思路,希望能给很多还在学习和使用ASP的朋友一种方便。尽管俺现在也很少用ASP了,但俺相信只要能满足应用,就没有什么过时不过时的,也许它的语言没那么高级,但做出来的应用不一定就低级,呵呵。

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

    后续更新请关注:http://code.google.com/p/easyasp/

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

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

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

  1. <!--#include file="inc/easp/easp.asp" -->
复制代码

   或:
  1. <!--#include virtual="/inc/easp/easp.asp"-->
复制代码


(2) 该类已经实例化,无需再单独实例化,直接使用Easp.前缀调用即可,如:

  1. Easp.wn("Test String")  或  Easp.db.AutoId("Table:ID")
复制代码


(3) 如要同时操作多个数据库,请实例化新的easpdb对象,如:

  1. Dim db2 : Set db2 = New EasyASP_db
  2.   db2.dbConn = db2.OpenConn(0,dbase,server)
复制代码


2、参数约定:
(1) 数组参数:由于VBScript没有arguments属性,不能使用动态参数,所以,在本类涉及到数据库数据的代码中,使用了Array(数组)来达到这一效果。本类中的部分参数可以使用数组(参数说明中有注明),但使用数组时应参照以下格式:

  1. Array("Field1:Value1", "Field2:True", "Field3:100")
复制代码

对,有点像json的格式,如果涉及到变量,那就这样:
  1. Array("Field1:" & Value1, "Field2:" & Value2, "Field3:" & Value3)
复制代码


可以这样说,本类中的几乎所有与数据库字段相关的内容都可以用以上的数组格式来设置条件或者是获取内容,包括调用存储过程要传递的参数。而这个类里最大的优点就是在使用时不用去考虑字段的类型,在字段后跟一个冒号,接着跟上相应的值就行了。如果你经常手写ASP程序的话,你很快就会感受到运用这种方式的魅力,除了数据类型不用考虑之外,它也很方便随时添加和删除条件。这里举个例子说明这个用法:
比如添加新记录的方法:
  1. Easp.db.AddRecord "Table", Array("FieldsA:测试数据","FieldsB:"&Now(),"FieldsC:True")
复制代码

参数只有两个,一个是表名,另一个就是这样的数组参数。如果要改变数据库结构,则修改上面的程序代码就非常简单了。

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

比如建立MSSQL数据库连接对象的方法:
  1. Set Conn = Easp.db.Open(0,"Database","User:Password@ServerAddress")
复制代码

很一目了然对不对,这里就用:和@分隔了几个参数而放在同一个参数里了。另外如果是Access数据库有密码则在第3个参数中输入就行了,没有其它参数了。
再比如获取记录集的方法:
  1. Set rs = Easp.db.GetRecord("Table:FieldsA,FieldsB,FieldsC:20","ID > 10","ID Desc")
复制代码

其中第1个参数中包含了表名,要取的字段和要取的记录数,因为字段和记录数很多时候是可以省略的,所以俺索性把参数也省略了,这样要记的参数要少很多滴。
再比如本类里有一个GetUrl()的获取本页面地址的方法,很多地方都见过是吧,但是本类里这个方法带一个参数,通过这个参数可以取得很多结果,看例子:
    比如本页面的实际地址为:
   
  1. http://www.domain.com/news/index.asp?type=public&feed=on&page=23
复制代码

    接下来是使用不同参数返回的结果:
  1.     方法              返回结果
  2.     GetUrl("")        http://www.domain.com/news/index.asp?type=public&feed=on&page=23
  3.     GetUrl(0)         /news/index.asp
  4.     GetUrl(1)         /news/index.asp?type=public&feed=on&page=23
  5.     GetUrl("page")    /news/index.asp?page=23
  6.     GetUrl("-page")   /news/index.asp?type=public&feed=on
  7.     GetUrl(":")       /news/?type=public&feed=on&page=23
  8.     GetUrl(":-feed,-page")  /news/?type=public
复制代码

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

[[i] 本帖最后由 coldstone 于 2008-10-23 12:27 编辑 ]

EasyASP.v1.5.rar

11.31 KB, 下载次数: 723

EasyASP v1.5 源代码

EasyASP.v1.5.Manual.rar

63.59 KB, 下载次数: 754

EasyASP v1.5 帮助手册

评分

参与人数 1威望 +2 收起 理由
帅青蛙 + 2 谢谢分享

查看全部评分

 楼主| 发表于 2008-10-23 12:25:35 | 显示全部楼层
方法和属性概览:
(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消息框
回复 支持 反对

使用道具 举报

发表于 2008-10-23 13:59:56 | 显示全部楼层
好复杂呀!! 看样子功能超级强大.
回复 支持 反对

使用道具 举报

发表于 2008-10-23 14:39:16 | 显示全部楼层
看了一下,果然写得不错。。支持一下。
回复 支持 反对

使用道具 举报

发表于 2008-10-23 15:54:44 | 显示全部楼层
不错不错,研究学习去了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 16:17:37 | 显示全部楼层
谢谢楼上几位。
因为原来的帖子很多人关心调用存储过程的问题,所以这一版特别加了存储过程的调用,方法比较简单,但是功能却不弱,这里俺把调用存储过程这一节帖一下,方便路过的关心SQL存储过程调用的朋友,呵呵。

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、没有输入输出参数,不返回记录集的存储过程的调用:

  1. Dim mySP
  2. mySP = Easp.db.doSP("myTestSP","")
  3. Easp.w mySP '输出返回值
复制代码


2、仅有输入参数,无输出参数,不返回记录集的存储过程的调用:

  1. mySP = Easp.db.doSP("myTestSP",Array("@param1:" & Value1, "@param2:" & Value2))

  2. '或者用更简单的方式,只把值作为Array参数的项目即可(仅应用于这一种情况):
  3. 'mySP = Easp.db.doSP("myTestSP",Array(Value1,Value2))

  4. Easp.w mySP '输出返回值
复制代码


3、有或者没有输入参数,有输出参数,不返回记录集的存储过程的调用:

  1. Set mySP = Easp.db.doSP("myTestSP:1",Array("@inParam1:" & Vlaue1,"@inParam2:" & Value2, "@@outParam1", "@@outParam2"))
  2. Easp.wn mySP("return") '输出返回值
  3. Easp.wn mySP("@@outParam1") '输出指定的输出参数值
  4. Easp.close(mySP)
复制代码


4、有或者没有输入参数,无输出参数,只返回记录集的存储过程的调用:

  1. Set mySP = Easp.db.doSP("myTestSP:2",Array("@param1:" & Value1, "@param2:" & Value2))
  2. While Not mySP.Eof '输出记录集内容
  3.         Easp.wn "ID:" & mySP(0)
  4.         Easp.wn "Name:" & mySP(1)
  5.         mySP.moveNext()
  6. Wend
  7. Easp.db.C(mySP)
复制代码


5、有或者没有输入参数,有输出参数,也要返回记录集的存储过程的调用:

  1. mySP = Easp.db.doSP("myTestSP:3",Array("@inParam1:" & Vlaue1,"@inParam2:" & Value2, "@@outParam1", "@@outParam2"))
  2. 'mySP返回的将是一个数组,第一个元素是记录集对象,第二个元素是参数和返回值
  3. Dim rs : Set rs = mySP(0)
  4. '这里可以操作rs记录集对象了
  5. '... ...
  6. Easp.wn mySP(1)("return") '输出返回值
  7. Easp.wn mySP(1)("@@outParam2") '输出指定参数值
复制代码


再次提醒注意:参数的顺序要同存储过程中的顺序完全一致。但参数名没有强制要求要和存储过程中一样,只是为了代码便于阅读,建议你这么做(输出参数除外,因为这里需要两个@,存储过程中只需要一个@)。

另外,如果你要返回多个记录集对象,可以用这种方式来对获取的多个记录集进行操作:

  1. Set rs = Easp.db.doSP("myTestSP:rs",Array("@param1:" & Value1, "@param2:" & Value2))
  2. While Not rs.Eof '输出记录集内容
  3.         Easp.wn "ID:" & rs(0)
  4.         Easp.wn "Name:" & rs(1)
  5.     Easp.wn "-----"
  6.         rs.moveNext()
  7. Wend
  8. Easp.wn "==== Next Recordset ===="
  9. Set rs = rs.NextRecordset() '获取下一个记录集
  10. While Not rs.Eof
  11.         Easp.wn "ProductID:" & rs(0)
  12.         Easp.wn "Photo:" & rs(1)
  13.     Easp.wn "-----"
  14.         rs.moveNext()
  15. Wend
  16. Easp.db.C(rs)
复制代码

[[i] 本帖最后由 coldstone 于 2008-10-23 16:23 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2008-10-23 20:28:14 | 显示全部楼层
谢谢LZ
回复 支持 反对

使用道具 举报

发表于 2008-10-24 08:48:57 | 显示全部楼层
有很多地方都有可荐之处.

顶一下.
回复 支持 反对

使用道具 举报

发表于 2008-10-24 12:01:21 | 显示全部楼层
看了一下代码很规范,值得借鉴。
回复 支持 反对

使用道具 举报

发表于 2008-10-24 12:30:14 | 显示全部楼层
收藏了再说.顺便顶一下!
回复 支持 反对

使用道具 举报

发表于 2008-10-25 12:22:03 | 显示全部楼层
楼主 你比我先...
回复 支持 反对

使用道具 举报

发表于 2008-10-25 14:26:30 | 显示全部楼层
下载下来看看!! 谢谢分享
回复 支持 反对

使用道具 举报

发表于 2008-10-26 22:27:58 | 显示全部楼层
多谢楼主,收下研究研究
回复 支持 反对

使用道具 举报

发表于 2008-10-27 08:20:27 | 显示全部楼层
真是太感谢了楼主了,我们学习者就是需要这些功能强大但应用简单的程序!
向那些讽刺asp,但是自已又不能开发出楼主这样造福广大学者,方便学习的人表示遣责!
回复 支持 反对

使用道具 举报

发表于 2008-10-27 09:47:45 | 显示全部楼层
不错的东西,珍藏一下,因为工作需要,我每天还得跟ASP打交道
回复 支持 反对

使用道具 举报

发表于 2008-10-27 11:29:42 | 显示全部楼层
学习一下可以,要用的话还是免了,最好是要用啥自己抠出来。。。
收藏了。。。
回复 支持 反对

使用道具 举报

发表于 2008-10-27 11:40:57 | 显示全部楼层
虽然很久不做asp的东西了,但是还是一样喜欢楼主的 作品
回复 支持 反对

使用道具 举报

发表于 2008-10-27 19:29:45 | 显示全部楼层
楼主,想轻轻的问一声:能不能附带一个应用的实例啊,我们这种新学习的人,还是不会应用啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-28 00:38:30 | 显示全部楼层
原帖由 [i]dongtso 于 2008-10-27 19:29 发表
楼主,想轻轻的问一声:能不能附带一个应用的实例啊,我们这种新学习的人,还是不会应用啊!

手册里全是实例,只需要根据你自己的数据库情况稍稍改一下就行了。
回复 支持 反对

使用道具 举报

发表于 2008-10-28 09:47:12 | 显示全部楼层
楼主高手,这个类确实简化了不少繁杂的操作!已经收藏,继续努力!
回复 支持 反对

使用道具 举报

发表于 2008-10-28 09:56:50 | 显示全部楼层
伟大的楼主,今天,试用了一下,如何读取数据,用的是GetRecordBySQL()方法,但是有一点我不太明白:用GetRecordBySQL()读取的数据集,输出时要这样:rs(1) rs(2) rs(3) rs(4) rs(5)这样的读出所有列,能不能直接用:rs(*)读出所有列呢,还是有其他方法呢,我还没有找到,可能是手册读的不够仔细,请楼主帮忙解答一下.
这个是那个示例的应用:http://www.268k.com/db.asp
回复 支持 反对

使用道具 举报

发表于 2008-10-28 09:59:20 | 显示全部楼层
还有,请楼主也把分页功能封装进去吧!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-28 10:21:05 | 显示全部楼层
原帖由 [i]dongtso 于 2008-10-28 09:56 发表
伟大的楼主,今天,试用了一下,如何读取数据,用的是GetRecordBySQL()方法,但是有一点我不太明白:用GetRecordBySQL()读取的数据集,输出时要这样:rs(1) rs(2) rs(3) rs(4) rs(5)这样的读出所有列,能不能直接用:rs(*)读出 ...

所有得到的记录集都是一个Recordset对象,也就是说可以用一切对Recordset对象的操作来操作它,包括用rs(0)或者rs("ID"),你也可以遍历记录集的fields集合:
For Each Keys In rs.Fields
    Easp.wn Keys.Name & ":" & Keys.Value
Next
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-28 10:31:09 | 显示全部楼层
原帖由 [i]dongtso 于 2008-10-28 09:59 发表
还有,请楼主也把分页功能封装进去吧!

分页已经在考虑中,但是除了用存储过程之外其它的分页方式在涉及到大数据量的时候(10W以上)效率都不怎么样,正在想有没有能提高效率的方式。俺也希望EasyASP中提供的功能都是高效的。
回复 支持 反对

使用道具 举报

发表于 2008-10-28 10:35:19 | 显示全部楼层

榜样啊

楼主你太伟大了。我喜欢,支持你!!!
回复 支持 反对

使用道具 举报

发表于 2008-10-28 20:49:01 | 显示全部楼层
楼主,回复的真及时,祝楼主早日开发出分页版块。
回复 支持 反对

使用道具 举报

发表于 2008-11-6 11:38:26 | 显示全部楼层
楼主,请问一下,这个类可以用来做新闻类网站吗,就是说可以用来显示新闻,能不能段前空行,及要显示html原代码时,要如何操作呢?
请指示?先表示谢谢了!
回复 支持 反对

使用道具 举报

发表于 2008-11-17 11:18:08 | 显示全部楼层
谢谢学习一下!
回复 支持 反对

使用道具 举报

发表于 2008-11-18 14:33:58 | 显示全部楼层
过了这几天,再来顶一下,目前正在学习帮助文件,感觉这个类太强大了,太感谢楼主了,你幸苦了。
回复 支持 反对

使用道具 举报

发表于 2008-11-18 18:48:34 | 显示全部楼层
很好很强大.值得一学..谢谢LZ
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-10-28 08:37 , Processed in 0.218199 second(s), 14 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表