论坛: 编程破解 标题: 自己写的一个ASP操作数据库类,使用存储过程。 复制本贴地址    
作者: 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号