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

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

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

搜索
查看: 8725|回复: 52

[asp] EasyASP v2.0数据库操作类,简化你的ASP开发(新增分页功能)

[复制链接]
发表于 2009-2-12 10:13:07 | 显示全部楼层 |阅读模式
EasyASP是一个方便快速开发ASP的类,其中包含了功能完善的数据库控制类Easp.db,具有对数据库进行各类操作、调用MSSQL存储过程及记录集分页等功能。EasyASP同时提供了大量实用的ASP通用过程及方法,可以简化大部分的ASP操作。目前提供下载的是VBScript版。

EasyASP v1.5原帖地址:http://bbs.blueidea.com/thread-2892426-1-1.html

EasyASP v2.0 的特点:

1、能方便的实现一个或多个数据库的增、删、改等控制操作。
2、对数据库字段进行操作时可以不用考虑字段值数据类型的差别(如文本字段不用加单引号)。
3、自带记录集分页和调用存储过程分页功能,拥有功能丰富的可完全自定义配置及调用。
4、能方便的执行带各种参数的MSSQL存储过程并返回多个值或多个记录集。
5、完善的数据库操作容错功能,能即时输出出错SQL语句方便调试。
6、在使用已经存在的数据库连接对象时能自动判断数据库类型。
7、专为Ajax设计的数据获取方式及输出Json格式数据。
8、能有效防止SQL注入。
9、自带数据类型验证及服务器端表单验证功能。
10、能轻松实现页面地址获取并对URL参数进行过滤以及替换。
11、具有专为EasyASP开发的适用于Dreamweaver CS3 和 CS4 的代码高亮及代码提示扩展插件。
12、具有完善的帮助手册及大量应用实例。

新增功能:

  • 新增数据分页功能,可以根据多种方式实现较高性能的记录集分页,还可以对分页导航进行完全自定义的多个配置,并且可在多个配置间自由切换。还可以很方便的生成静态分页导航及Ajax分页导航。
  • 新增在使用已经存在的数据库连接对象时可以自动判断数据库类型的功能。
  • 新增Escape方法和UnEscape方法,用于将特殊字符编码和解码,可解决非UTF-8下的Ajax中文乱码问题。
  • 新增IIF方法,功能同IfThen方法一样,而且更符合大多数人的习惯。
  • 新增GetUrlWith方法,可以在getUrl方法的基础上加上新的Url参数和值,非常实用。
  • 新增regReplace方法,支持按正则表达式替换字符串内容。
  • 新增EasyASP的Dreamweaver代码提示及代码高亮扩展插件。

其它更新:

  • 将EasyASP原来的多个asp文件合并为了一个文件easp.asp以方便调用,但如果有需要的话仍然可以把数据库操作类EasyASP_db单独出来使用。
  • 优化了isN方法,可以检测多种类型的数据是否为空。
  • 优化DateTime方法,增加英文月份及缩写格式,增加输出为如“3个小时前”等格式。
  • 优化RandStr及db.RandStr方法,可以指定获取的随机字符串的字符范围。
  • 将原来的Easp.Close方法更新为Easp.C方法。
  • 优化SetCookie、GetCookie、RemoveCookie方法,现在可以设置Cookie的集合、域、路径及安全。
  • 修正db.OpenConn方法中服务器密码不能包含“:”、“@”等特殊字符的Bug。
  • 再次优化db.AutoId方法,能更好的解决并发量大时的自动编号获取的问题。
  • 重新制作了EasyASP v2.0帮助手册,并添加了代码高亮功能。
  • 对代码进行了简单重构,减少了大量的冗余代码,并修正了其它一些小的Bug。

更新说明:

1、EasyASP在开发之初就首先定位于Easy,所以在编写分页的时候也主要是考虑如何使用方便和简单。EasyASP的分页功能在性能上做了最大程度的努力,可以根据数组参数(和Easp.db.GetRecord方法相似)、SQL语句、记录集和存储过程来生成分页数据,对于MSSQL来说,根据数组条件和存储过程分页的效率是比较高的,而Access数据库的话则可以使用数组条件、SQL语句方式或记录集方式。在使用的方便性上EasyASP也采用了颠覆性的方式,采用了类似javascript中常用的Json方式的配置方法,而且您可以预先配置多个样式的分页导航,并在不同的地方直接调用事先配置的各种样式,轻松实现在一个页面中包含多种不同样式的分页(包括嵌套分页),这一点俺非常有自信大家会喜欢这种方式的。 看看几个用EasyASP生成分页的例子吧(帮助手册截图):
pager.jpg
2、在编写分页功能的过程中,偶然看到Jorkin写的《Kin_Db_Pager分页类》,受到了很大启发。EasyASP的分页导航多配置部分就是基于他的这个分页类的一些思想实现的,优化后的isN方法也是基本照搬他的isBlank函数,在此特别感谢一下。
3、EasyASP中的用MSSQL存储过程分页功能中内置了一个默认的存储过程easp_sp_pager,该存储过程是使用了nzperfect编写的《单主键高效通用分页存储过程》,也在此特别感谢一下。
4、另外为了使用方便,这一次在更新 EasyASP v2.0 的时候特别制作了一个用于Dreamweaver CS3 和 CS4 的 EasyASP v2.0 代码提示和代码高亮的扩展插件,大家在用Dreamweaver编写程序的时候应该会非常有用的,就像下面这样:
EasyASP_v2_for_Dreamweaver.jpg
EasyASP后续更新下载、帮助手册下载、Dreamweaver扩展插件下载请关注:http://code.google.com/p/easyasp/

[[i] 本帖最后由 coldstone 于 2009-2-12 15:03 编辑 ]

EasyASP.v2.0.Release.All.rar

174.41 KB, 下载次数: 621

EasyASP All Files ( Code+Manual+mxp+sql )

发表于 2009-2-12 12:23:57 | 显示全部楼层
呵呵,支持一下。
回复 支持 反对

使用道具 举报

发表于 2009-2-12 12:41:51 | 显示全部楼层
  我倒~~~

“有记参数的时间,SQL语句早都写完了“

那个也是我说的。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2009-2-12 13:31:38 | 显示全部楼层
的确不错,我使用了其中部分函数

新手不建议使用,它实在太简化了,连字符串和数字都没区分,用久了会忘记它们的区别的

我用的时候改了点,区分不同类型的数据,日后我开发的系统开源了,新手也容易上手

[[i] 本帖最后由 jsw0528 于 2009-2-12 13:44 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-12 13:45:31 | 显示全部楼层
原帖由 [i]jorkin2000 于 2009-2-12 12:23 发表
呵呵,支持一下。

谢谢支持,你很强大,再次感谢一下,呵呵。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-12 13:47:22 | 显示全部楼层
原帖由 [i]jsw0528 于 2009-2-12 13:31 发表
的确不错,我使用了其中部分函数

新手不建议使用,它实在太简化了,连字符串和数字都没区分,用久了会忘记它们的区别的

我用的时候改了点,区分不同类型的数据,日后我开发的系统开源了,新手也容易上手

呵呵,看来我已经达到部分目的了,就是要一切都更简单。
回复 支持 反对

使用道具 举报

发表于 2009-2-12 18:55:55 | 显示全部楼层
当我看到:(如文本字段不用加单引号)。这几个字时,就没有再往下看了,决定不适合我,哈哈。

我怕会破坏正确的语法书写习惯的。。
回复 支持 反对

使用道具 举报

发表于 2009-2-12 19:31:42 | 显示全部楼层
支持一下楼主,代码不错!辛苦了!

大概看了一下部份代码,挺有创意!
另外,提一下我的看法,我总觉得Easp.db 里的部份函数有点复杂了,实际用途不大!

如:
Easp.db.GR("TestTable:20", Array("fSex:男","IsActive:1"), "fName Asc")   

等价于: Select Top 20 * From [TestTable] Where fSex='男' And IsActive = 1 Order By fName Asc  

函数的亮点是不用判断字段类型, 但牺牲了性能,(生成这个SQL语句还需要进行多种判断,以及读取一次数据库判断类型)

我建议这个函数可以删除,原因如下:

1.性能下降
2.针对熟手,看SQL代码会更直接,维护起来也更方便.
3.针对新手,会给新手不好的使用习惯!!

我个人觉得Db下操作数据库,两个函数基本就够用了.

如:
一个 Db.Execute(Sql)    :  Conn.Execute(Sql)
一个 Db.RecordSet(Sql)  :  Set RecordSet = Server.CreateObject("Adodb.RecordSet") : Db.GetRecordBySql

另外,这个类可以再加上简单的 FSO,adodb.Stream,XMLHTTP 的函数

总体来说,这个类还是非常不错,再次支持一下!
回复 支持 反对

使用道具 举报

发表于 2009-2-15 03:27:45 | 显示全部楼层
呵呵,这么快就有2.0版了,楼主辛苦了~~非常好用~
回复 支持 反对

使用道具 举报

发表于 2009-2-15 12:13:11 | 显示全部楼层
强烈支持
回复 支持 反对

使用道具 举报

发表于 2009-2-15 12:43:29 | 显示全部楼层
看来被我说中了,新手不太适合用啊,LZ你弄的太简单,不利于新手学习啊,呵呵~~~
回复 支持 反对

使用道具 举报

发表于 2009-2-16 10:41:57 | 显示全部楼层
支持一下,有空时研究一下...希望对我有帮助
回复 支持 反对

使用道具 举报

发表于 2009-2-17 13:52:03 | 显示全部楼层
太好了,又出新的作品了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-18 16:16:15 | 显示全部楼层

回复 7# alixixi 的帖子

你用过就知道了。。并不会出现这方面的问题。。省略单引号并不是在SQL语句的书写过程中。。而且整个过程都可以很方便的输出SQL语句。。所以对语法方面不用担心。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-18 16:23:39 | 显示全部楼层
原帖由 [i]cnbjx 于 2009-2-12 19:31 发表
支持一下楼主,代码不错!辛苦了!

大概看了一下部份代码,挺有创意!
另外,提一下我的看法,我总觉得Easp.db 里的部份函数有点复杂了,实际用途不大!

如:
Easp.db.GR("TestTable:20", Array("fSex:男","IsActive:1 ...

其实在我本人写ASP的实际过程中,我仍然觉得类似db.GR这样的函数用处还是很大的,不过就像你说的,会牺牲一点点性能,但如果是用在并发量不大的环境中,我觉得绝对是值得的。可能因为我是个懒人吧,喜欢写代码的时候能少写的时候就少写,呵呵。谢谢你的意见,其实大家都完全可以根据自己的需要对源码和功能进行扩展。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-18 16:27:02 | 显示全部楼层
原帖由 [i]jsw0528 于 2009-2-15 12:43 发表
看来被我说中了,新手不太适合用啊,LZ你弄的太简单,不利于新手学习啊,呵呵~~~

老实说,对完全没有基础的新手确实不适合。真正愿意用我这个类的人我觉得应该大部分是自己写过ASP的程序,但是觉得过程很复杂繁琐而努力想要寻求一种更简单解决方案的人。
回复 支持 反对

使用道具 举报

发表于 2009-2-20 16:41:19 | 显示全部楼层
看完了...相当的不错...

不过要是能在里面再加上 模板类, 页面静态化生成 类 和 购物车类。那就更好了。

就基本能完成一个中小项目的所有工作啦...
~_~
回复 支持 反对

使用道具 举报

发表于 2009-2-21 14:18:23 | 显示全部楼层

回复 16# coldstone [楼主] 的帖子

嗯,是的,我开发的企业站后台系统就用了你部分函数,继续关注
回复 支持 反对

使用道具 举报

发表于 2009-2-23 12:05:52 | 显示全部楼层

回复 1# coldstone [楼主] 的帖子

我使用的是 dr cs3,我们知道c3页面默然吧编码是utf-8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
Dim conn,rs,sql
Set conn=Easp.db.OpenConn("access","data/#basedata.mdb","")
Easp.db.dbConn=conn
Set rs=Server.CreateObject("ADODB.recordset")
sql="select top 10 id,title from news order by id desc"
rs.open sql,conn,1,3
%>
<%
While Not rs.Eof
%>
<span><%=rs("id")%>、<%=rs("title")%></span><br  />
<%
  rs.moveNext:wend
  rs.Close
  Set rs = Nothing
%>       

这杨我显示的结果是乱码
然当我改成gb2312的时候 ,字符就显示正常了,

是我对这个框架了解不多,还是我们对的编码没有处理?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-24 02:27:44 | 显示全部楼层
原帖由 [i]latimerjie 于 2009-2-23 12:05 发表
我使用的是 dr cs3,我们知道c3页面默然吧编码是utf-8

源码中的中文都没有做过处理,所以如果用utf-8需要手动转换一下编码,EasyASP默认是gb2312编码的。
另外,DW CS3也可以改为默认gb2312编码的。Ctrl+U > 新建文档 > 默认编码

[[i] 本帖最后由 coldstone 于 2009-2-24 02:29 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-2-24 08:55:03 | 显示全部楼层
非常有用,谢谢,偶仔细的看看了代码,发现更新数据的时候有问题啊,楼主,希望你再看看逻辑关系,修改的时候不能直接判断有或者没有的事务,因为可能修改的时候我只修改一个字段,其它的字段都相同,不知道偶的理解是否正确
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-25 01:42:49 | 显示全部楼层
原帖由 [i]hanfeng527 于 2009-2-24 08:55 发表
非常有用,谢谢,偶仔细的看看了代码,发现更新数据的时候有问题啊,楼主,希望你再看看逻辑关系,修改的时候不能直接判断有或者没有的事务,因为可能修改的时候我只修改一个字段,其它的字段都相同,不知道偶的理解是否正确: ...

嗯。。恕俺实在不能理解你的意思。。也无法重现你说的更新时候的问题。。能举个例子说明一下吗?
回复 支持 反对

使用道具 举报

发表于 2009-2-26 13:05:55 | 显示全部楼层
编辑掉,原来和这个帖子http://bbs.blueidea.com/thread-2805579-1-1.html是同一个作者,呵呵,支持啊!
一直用着这个类,非常方便

[[i] 本帖最后由 liaoyizhi520 于 2009-2-26 13:09 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-3-4 13:34:48 | 显示全部楼层
还是觉得应该把公共方法和数据库类分开,方便自由调用.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-5 16:11:59 | 显示全部楼层
原帖由 [i]lzp4881 于 2009-3-4 13:34 发表
还是觉得应该把公共方法和数据库类分开,方便自由调用.

其实那是两个独立的类,需要的话可以分开的,改的地方也很少。
不过目前加Easp.前缀是为了以后统一命名的需要,EasyASP还将加入更多其它的类(不仅仅是数据库类),还是用一个类封起来比较好。
回复 支持 反对

使用道具 举报

发表于 2009-3-11 17:24:17 | 显示全部楼层
Case vbArray,8194,8204,8209
是什么意思?
回复 支持 反对

使用道具 举报

发表于 2009-3-13 16:14:00 | 显示全部楼层
老大,你的分页程序示例能不能详细点啊
回复 支持 反对

使用道具 举报

发表于 2009-3-14 10:56:37 | 显示全部楼层
希望楼主提供用于Dreamweaver2004 的 EasyASP v2.0 代码提示和代码高亮的扩展插件!(还是2004用的顺手啊)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-16 09:59:31 | 显示全部楼层
原帖由 [i]lzp4881 于 2009-3-11 17:24 发表
Case vbArray,8194,8204,8209
是什么意思?

这是数组的几种子类型,比如vbArray也就数组8192,8194就是整数数组8192+2,实际要看添加到变量数组中的Variant值。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-16 10:30:15 | 显示全部楼层
原帖由 [i]ky4682 于 2009-3-13 16:14 发表
老大,你的分页程序示例能不能详细点啊

分页其实很简单,几个要点,以Access数据库为例:

第1步,设置分页样式(如果不自定义样式这一步则可省略):
  1. Easp.db.SetPager "mypage", "{first}{prev}{list}{next}{last} 跳转到第{jump}页,第{pageindex}页/共{pagecount}页",Array("first:首页","last:尾页","prev:上页","next:下页","jump:select")
复制代码

为什么推荐第1步就设置分页样式呢,因为这里的分页样式是可以重用在多个分页记录集的,比如这里的名称是"mypage",以后就可以用Easp.db.GetPager("mypage")来多次调用这个样式。至于上面参数的配置,你可以看手册中的详细说明,每个地方都是可以完全自定义的,也可以添加任意的html代码在里面。

第2步,获取记录集:
  1. Set rs = Easp.db.GetPageRecord("sql","Select * From Table")
复制代码

这里使用的是用SQL的方式取得记录集,你也可以直接使用当前页面上已经存在的记录集,当然我更推荐用array的方式,这个可以看手册。

第3步,循环你的记录集数据(这和你以前做的数据循环是一样的,当然,先显示分页列表还是先循环记录集这取决于你,分页列表需要的数据在Easp.db.GetPageRecord之后就已经取完了)

  1. Dim i : i = 0
  2. While Not rs.Eof And (i<rs.PageSize)
  3.    '...这里是你的数据循环显示,例如:
  4.     Easp.WC("<li><a href=""show.asp?id="&rs("id")&""">"&rs("title")&"</a></li>")
  5.     i = i + 1
  6.     rs.MoveNext()
  7. Wend
复制代码


第4步,显示分页列表(注意GetPager只显示距离最近的GetPageRecord取得的数据的效果):
  1. Easp.WC Easp.db.GetPager("mypage")
复制代码

如果你第一步没有配置setPager,则可以调用默认分页效果:
  1. Easp.WC Easp.db.GetPager("")
复制代码


最后,如果分页列表中需要用到取得记录集后会变化的变量,则可以用Easp.db.Pager来即时生成分页样式列表,方法同Easp.db.setPager是一样的。

在使用分页的时候可以多根据手册试一下,如果还有问题可以附上代码提问,那样我可以更有针对性的回答。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-10-28 07:59 , Processed in 0.124686 second(s), 11 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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