|
![]() | 作者: lwei889 [lwei889]
![]() |
登录 |
写了这么久的ASP程序,每天都是数据库操作,有点烦了!无奈,今天写了个ASP操作数据库类,或许别人早就写了,只是没去搜。下面是自己写的,好坏都贴出来了。 <% '+++++++++++++++++++++++++++++++++++ ' asp操作数据库类 ' powered by thinkerlee '+++++++++++++++++++++++++++++++++++ '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ '参数说明 'table 表名 'fldname 字段名,多个字段 以“,”隔开 'strorder 排序字段名 'strwhere 查询条件 注意不要加"where" 如果条件为空,请设置strwhere="nowhere" '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Class DB_Handle Private name Private version Private author Private connstr Private p_name Private comm Private Sub Class_Initialize() name = "asp数据库操作类" Version = "1.0" author = "thinkerlee" tmp="代码完成中..." End Sub rem 取得数据库连接字符串 Public Function db_connection(str) connstr=str End Function rem 取得数据库连接字符串 Public Function db_procename(proc_name) p_name=proc_name End Function rem 建立Command对象 Public Function db_command() Set Comm = Server.CreateObject("ADODB.Command") Comm.ActiveConnection =connstr '设置数据库连接 Comm.CommandText = p_name '指定存储过程名 Comm.CommandType = 4 'command 类型 Comm.Prepared = true '要求将SQL命令先行编译 End Function rem 分页显示函数 Public Function db_page(table,fldname,strorder,strwhere,pagesize,pageno) 'pagesize 分页大小 'pageno 当前页码 Call db_command() nowpage=(pageno-1)*pagesize '声明参数 Comm.Parameters.append Comm.CreateParameter("@table",200,1,200,table) Comm.Parameters.append Comm.CreateParameter("@fldname",200,1,200,fldname) Comm.Parameters.append Comm.CreateParameter("@strorder",200,1,200,strorder) Comm.Parameters.append Comm.CreateParameter("@strwhere",200,1,200,strwhere) Comm.Parameters.append Comm.CreateParameter("@pagesize",3,1,4,pagesize) Comm.Parameters.append Comm.CreateParameter("@pageno",3,1,4,nowpage) set rs=Comm.Execute db_page=rs.getrows '释放对象 rs.close set rs=Nothing Call db_free(5) End Function rem 计算总记录函数 Public Function db_total(table,strwhere,pagesize,cfldname) '其实在分页的时候就可以计算,但我在计算时却得不到结果,只有再写个函数出来 'pagesize 分页大小 'cfldname 统计字段名 Call db_command() '声明参数 Comm.Parameters.append Comm.CreateParameter("@table",200,1,200,table) Comm.Parameters.append Comm.CreateParameter("@strwhere",200,1,200,strwhere) Comm.Parameters.append Comm.CreateParameter("@cfldname",200,1,200,cfldname) set rs=Comm.Execute db_total=int(rs("totalpage")/pagesize*(-1))*-1 rs.close set rs=Nothing Call db_free(3) End Function rem select 语句 Public Function db_select(table,fldname,strorder,strwhere,top) 'top 查询top 条记录 如果不指定 设置TOP=0 Call db_command() '声明参数 Comm.Parameters.append Comm.CreateParameter("@table",200,1,200,table) Comm.Parameters.append Comm.CreateParameter("@fldname",200,1,200,fldname) Comm.Parameters.append Comm.CreateParameter("@strorder",200,1,200,strorder) Comm.Parameters.append Comm.CreateParameter("@strwhere",200,1,200,strwhere) Comm.Parameters.append Comm.CreateParameter("@top",3,1,4,top) set rs=Comm.Execute db_select=rs.getrows '释放对象 rs.close set rs=Nothing Call db_free(5) End Function rem update 语句 Public Function db_update(table,update,strwhere) Call db_command() 'update 要更新的字段及其值 Comm.Parameters.append Comm.CreateParameter("@table",200,1,200,table) Comm.Parameters.append Comm.CreateParameter("@update",200,1,200,update) Comm.Parameters.append Comm.CreateParameter("@strwhere",200,1,200,strwhere) Comm.Execute '成功操作返回1 db_update=1 '释放对象 Call db_free(3) End Function rem delete 语句 Public Function db_delete(table,strwhere) Call db_command() 'update 要更新的字段及其值 Comm.Parameters.append Comm.CreateParameter("@table",200,1,200,table) Comm.Parameters.append Comm.CreateParameter("@strwhere",200,1,200,strwhere) Comm.Execute '成功返回1 db_delete=1 '释放对象 Call db_free(2) End Function rem insert 语句 Public Function db_insert(table,fldname,fldvalues) 'fldvalues 字段值,多个字段值以','隔开 Call db_command() 'update 要更新的字段及其值 Comm.Parameters.append Comm.CreateParameter("@table",200,1,200,table) Comm.Parameters.append Comm.CreateParameter("@strwhere",200,1,200,fldname) Comm.Parameters.append Comm.CreateParameter("@strwhere",200,1,200,fldvalues) Comm.Execute '成功返回1 db_insert=1 '释放对象 Call db_free(3) End Function rem 导入函数 Public Function db_input() response.write tmp End Function rem 清除command 参数及对象 Public Function db_free(cc) j=cc-1 For i=0 To cc-1 Comm.Parameters.delete j-i next Set Comm = Nothing End Function End Class %> 分页存储过程 create procedure proc_page @tabname varchar(20), @fldname varchar(500), @strorder varchar(500), @strwhere varchar(500), @pagesize int, @pageno int as declare @strsql varchar(5000) if @strwhere='nowhere' begin set @strsql='select top '+str(@pagesize)+' '+ @fldname + ' from ' + @tabname + ' where id not in (select top '+str(@pageno)+' id from '+ @tabname +' order by '+@strorder+' desc) order by '+@strorder+' desc' end else begin set @strsql='select top '+str(@pagesize)+' '+ @fldname + ' from ' + @tabname + ' where id not in (select top '+str(@pageno)+' id from '+ @tabname+' where '+@strwhere+' order by '+@strorder+' desc) and '+@strwhere+' order by '+@strorder+' desc' end exec(@strsql) go 记录总数存储过程 create procedure proc_total @tabname varchar(20), @strwhere varchar(500), @cfldname varchar(500) as declare @strsql varchar(5000) if @strwhere='nowhere' set @strsql='select count('+@cfldname+') as totalpage from '+@tabname else set @strsql='select count('+@cfldname+') as totalpage from '+@tabname+' where '+@strwhere exec(@strsql) go select语句存储过程 CREATE procedure proc_select @tabname varchar(20), @fldname varchar(500), @strorder varchar(500), @strwhere varchar(500), @top int as declare @strsql varchar(5000) declare @ttop varchar(50) if @top=0 set @ttop='' else set @ttop='top' if @strwhere='nowhere' begin set @strsql='select +'+@ttop+' '+str(@top)+' '+ @fldname + ' from ' + @tabname + ' order by '+@strorder+' desc' end else begin set @strsql='select '+@ttop+' '+str(@top)+' '+ @fldname + ' from ' + @tabname + ' where '+ @strwhere+' order by '+@strorder+' desc' end exec(@strsql) GO update语句存储过程 CREATE procedure proc_update @tabname varchar(20), @update varchar(500), @strwhere varchar(500) as declare @strsql varchar(5000) if @strwhere='nowhere' begin set @strsql='update '+@tabname + ' set ' + @update end else begin set @strsql='update '+@tabname + ' set ' + @update + ' where '+ @strwhere end exec(@strsql) GO delete语句存储过程 CREATE procedure proc_delete @tabname varchar(20), @strwhere varchar(500) as declare @strsql varchar(5000) if @strwhere='nowhere' begin set @strsql='delete from '+@tabname end else begin set @strsql='delete from '+@tabname + ' where '+ @strwhere end exec(@strsql) GO insert 语句存储过程 CREATE procedure proc_insert @tabname varchar(30), @strwhere varchar(500) as declare @strsql varchar(5000) set @strsql='insert into '+@tabname+'('+@fldname+') values('+@fldvalues+')' exec(@strsql) GO [此贴被 子木(lwei889) 在 04月03日18时43分 编辑过] |
地主 发表时间: 06-04-03 18:40 |
![]() | 回复: lwei889 [lwei889] ![]() |
登录 |
<!--#include file=db_handle.asp--> <% Set kk=new DB_handle Call kk.db_connection(mm_conn_string) //传入连接字符串 Call kk.db_procename(proc_name) //传入存储过程名 rss=kk.db_page(table,fldname,strorder,strwhere,pagesize,1) //得到返回结果(使用二维数组存放) rowsa=ubound(rss,2) for i=0 to rowsa //这里处理结果 Next response.write tmp %> 上面是调用分页的代码的例子 |
B1层 发表时间: 06-04-03 18:54 |
![]() | 回复: drckness [drckness] ![]() |
登录 |
![]() 好像少了End Class 不知道分页效率如何 我一直在用叶子分页类 有兴趣看下,呵呵 http://www.4h4.cn/myblog/default.asp?id=10 |
B2层 发表时间: 06-04-05 11:35 |
![]() | 回复: lwei889 [lwei889] ![]() |
登录 |
大致看了下你的代码,有时间会仔细阅读下 end class没少,再仔细看下 ![]() 分页的效率应该还可以,我使用的是 select top pagesize where id not in 方法,只不用时间字段排序 在我们服务器上测试可以翻到2000页以后,但会反映慢! 呵呵 |
B3层 发表时间: 06-04-05 12:23 |
![]() | 回复: NetFog [q70213526] ![]() |
登录 |
叶子分页类大家都用他的. |
B4层 发表时间: 06-04-05 12:26 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号