惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
Hugging Face - Blog
Hugging Face - Blog
L
LINUX DO - 热门话题
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
D
Docker
C
Cyber Attacks, Cyber Crime and Cyber Security
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
T
Tenable Blog
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
小众软件
小众软件
Cisco Talos Blog
Cisco Talos Blog
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
Arctic Wolf
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
The Hacker News
The Hacker News
Project Zero
Project Zero
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
Jina AI
Jina AI
Cyberwarzone
Cyberwarzone
The Register - Security
The Register - Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Vercel News
Vercel News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
MongoDB | Blog
MongoDB | Blog
U
Unit 42
Scott Helme
Scott Helme
A
About on SuperTechFans
WordPress大学
WordPress大学
F
Fortinet All Blogs
大猫的无限游戏
大猫的无限游戏
G
GRAHAM CLULEY
Latest news
Latest news
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Schneier on Security

博客园 - Lee Vane

无法通过“控制面板”卸载 Office 2003、Office 2007 或 Office 2010 套件的情况下,如何才能将其卸载? 量子恒道统计-淘宝添加步骤 朋友写的,我觉得比较好,批量生产HTML中使用的 使用CSS设计了一个导航栏(仿康盛创想) 文章内容分页 可点击的下拉菜单 ASP多行多列显示代码- 5行 Formfieldhints.--表单提示效果 项目分享---google calendar.(日历,java版). asp根据出生时间判断生肖 用 JavaScript 实现网页图片等比例缩放 新闻标题太长加省略号和对内容太长分页 检查组件是否已经安装,用Jmail组件发送邮件 格式化日期 ASP函数,实现多个功能的弹出对话框 全选并改变TR颜色 选择文字就能选择复选框 简洁的TAB 阿里妈妈的商城分类效果一
ASP数据库操作类
Lee Vane · 2008-10-01 · via 博客园 - Lee Vane

<%
Class dbClass
'-------------------------------------------------------------------------
'变量说明
'conn-----------connection对象
'strsql---------执行查询的语句
'vTbName--------查询分页的表名
'vPKey----------查询分页的表的主键
'vPgFields------查询分页要显示的字段
'vPgSize--------查询分页每页显示的记录数
'vCurrPg--------查询分页显示的当前页
'vConditions----查询分页的条件
'vOrderBy-------查询分页的排序
'-------------------------------------------------------------------------
private conn,strsql,vTbName,vPKey,vPgFields,vPgSize,vCurrPg,vConditions,vOrderBy
'类的初始化
private Sub Class_Initialize()
'当是MS Sql数据库时设置以下两个变量
'dim dbServer '数据库服务器的名称或ip地址
'dim dbname '数据库的名字
dim dbPath '若是Access数据库,此处设置其路径
dim dbUser '数据库的登录用户名
dim dbPass '数据库的登录密码
dim connstr
dbPath = "/testasp/data/data.mdb" '设置数据库路径
dbUser = "admin"

dbPass = "123456"
'若是access,并且有密码 http://www.dwww.cn
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(dbPath) &_
";User ID=" & dbUser & ";Password=;Jet OLEDB:Database Password=" & dbPass
'若是access,并且没有密码
'connstr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(dbPath)
'若是ms-sql数据库
'connstr = "Provider = Sqloledb; User ID = " & dbUser & "; Password = " & dbPass &_
' "; Initial Catalog = " & dbname & "; Data Source = " & dbServer

on error resume next
set conn=server.CreateObject("adodb.connection")
conn.open connstr
errMsg "连接数据库"
End Sub
'类结束
Private Sub Class_terminate()
conn.close
set conn=nothing
End Sub
'-------------------------------------------------------------------------
'给类的变量设置值
'-------------------------------------------------------------------------
'设置sql语句
Public Property Let sqlStr(Byval Values)
strsql=Values
End Property
'设置查询分页的表名
public property let tbName(Byval Values)


vTbName=Values
end property
'--------------------------------------------------------
'设置查询分页的表的主键
public property let pKey(ByVal Values)
vPKey=Values
end property
'--------------------------------------------------------
'设置显示的字段
public property let pgFields(ByVal Values)
vPgFields=Values
end property
'--------------------------------------------------------
'设置每页显示的记录数
public property let pgSize(ByVal Values)
vPgSize=Values
end property
'---------------------------------------------------------
'设置当前显示的页数
public property let currPg(ByVal Values)
vCurrPg=Values
end property
'--------------------------------------------------------
'设置查询的条件
public property let conditions(ByVal Values)
if Len(Values)>0 then
vConditions=" where "&Values
else
vConditions=" where 1=1 "
end if
end property
'-------------------------------------------------------
'设置查询的排序
public property let orderBy(ByVal Values)
if Len(Values)>0 then
vOrderBy=" order by "&Values
else
vOrderBy=Values
end if
end property
'-------------------------------------------------------------
'得到记录总数
public property get vRsCount()
if vCurrPg=1 then
sqlc="select count("&vPKey&") as Idcount from "&vTbName&" "&vConditions
set rsc=server.CreateObject("adodb.recordset")
rsc.open sqlc,conn,0,1
RsNum=rsc("IdCount")
rsc.close
set rsc=nothing
if RsNum>0 then
response.Cookies("iRecord")=RsNum
vRsCount=RsNum
else
vRsCount=0
end if
else
vRsCount=request.Cookies("iRecord")
end if
end property
'得到总页数
public property get vPgCount()
iRsCount2=vRsCount()
if iRsCount2 mod vPgSize =0 then
vPgCount=int(iRsCount2/vPgSize)
else
vPgCount=int(iRsCount2/vPgSize)+1
end if
end property
'查询数据库
Public Function rsDB()
on error resume next
'简单的查询出结果
' set rsDB = Server.CreateObject("ADODB.RecordSet")
' rsDB.Open strsql,conn,1,3
Set rsDB=conn.Execute(strsql)
errMsg "查询数据库"
End Function
'添加,更新,删除数据库记录
public Function upDB()
on error resume next
conn.execute(strsql)
errMsg "编辑数据库记录"
end Function
'-------------------------------------------------------------------------
'用来实现分页的记录集函数 http://www.dwww.cn
public function pageRs()
on error resume next
dim startRs
startRs=(vCurrPg-1)*vPgSize
'-------------------------------------------------------------------------------------------
'使用此语句的话要根据参数修改代码,具体的是若排序为asc则<改为>,min改为max
' if startRs=0 then
' strsql="select top "&vPgSize&" "&vPgFields&" from "&vTbName&" "&vConditions&" "&vOrderBy
' else
' strsql="select top "&vPgSize&" "&vPgFields&" from "&vTbName&" "&vConditions&" and "&vPKey&" < "
' strsql=strsql&"(select min("&vPKey&") from (select top "&startRs&" "&vPKey&" from "


' strsql=strsql&vTbName&" "&vConditions&" "&vOrderBy&") as idTable) "&vOrderBy
' end if
'---------------------------------------------------------------
if startRs=0 then
strsql="select top "&vPgSize&" "&vPgFields&" from "&vTbName&" "&vConditions&" "&vOrderBy
else
strsql="select top "&vPgSize&" "&vPgFields&" from "&vTbName&" "&vConditions&" and "&vPKey&" not "
strsql=strsql&"in (select top "&startRs&" "&vPKey&" from "&vTbName&" "&vConditions&" "&vOrderBy
strsql=strsql&") "&vOrderBy
end if
'-------------------------------------------------------------------
set pageRs=server.CreateObject("adodb.recordset")
pageRs.open strsql,conn,0,1
errMsg "记录分页"
end function
'------sql用存储过程分页------------------------------------------------------
public function sqlPage()
on error resume next
Set sqlPage=server.CreateObject("Adodb.RecordSet")
Set Cm=Server.CreateObject("Adodb.Command")
Cm.CommandType = 4
Cm.ActiveConnection = conn
Cm.CommandText="sp_Util_Page"
Cm.parameters(1) = vPgFields
Cm.parameters(2) = vTbName
Cm.parameters(3) = vConditions
Cm.parameters(4) = vOrderBy
Cm.parameters(5) = vPKey
Cm.parameters(6) = vCurrPg
Cm.parameters(7) = vPgSize
Cm.parameters(8) = vRsCount()
Cm.parameters(9) = ""
sqlPage.CursorLocation = 3
sqlPage.LockType = 1
sqlPage.Open Cm
errMsg "记录分页"
end function
'----------------------------------------------------------------------------
'关闭记录集objRs
'----------------------------------------------------------------------------
Public Function cRs(ByVal ObjRs)
ObjRs.close()
Set ObjRs = Nothing
End Function
'----------------------分页的页码导航---------------------------------------
public function pageNav()
iRsCount=vRsCount()'总记录数
mypage=vCurrPg'当前页数
PgCount=vPgCount()'总页数
prePage=mypage-1
if prePage<1 then
prePage=1
end if
nextPage=mypage+1
if nextPage>PgCount then
nextPage=PgCount
end if
pagestr="<div id=""fy""><span id=""rpc"">总共有"&iRsCount&"条记录 "&mypage&"/"&PgCount&"</span>"
pagestr=pagestr&"<a href='?currpage=1' class='aW'>首页</a><a href='?currpage="&prePage&"' class='aW'>前一页</a>"
if (mypage-1) mod 4=0 then
firstPage=mypage
elseif int((mypage-1)/4)=0 then
firstPage=1
else
firstPage=int((mypage-1)/4)*4+1
end if
endPage=firstPage+4
astr=""
for i=firstPage to endPage
astr=astr&"<a href='?currpage="&i&"'"
if Cstr(mypage)=Cstr(i) then
astr=astr&" id='currP'"
end if
astr=astr&">"&i&"</a>"
if i>PgCount-1 then exit for
next
astr=astr&"<a href='?currpage="&nextPage&"' class='aW'>后一页</a><a href='?currpage="&PgCount&"' class='aW'>尾页</a></div>"
pagestr=pagestr&astr
pageNav=pagestr
end function
'输出带分页功能的table
Function showTb(ByVal TbTil)

set rsTb=pageRs()'若是存储过程就调用sqlPage()
tbRs= rsTb.getrows()
cRs(rsTb)
iTblRow=Ubound(tbRs,2)
iTblCol=Ubound(TbTil)
tbStr="<table border='0' cellspacing='0' cellpadding='0'><tbody>"
for r1=0 to iTblCol
tr1=tr1&"<td width='"&split(TbTil(r1),"|")(1)&"'>"&split(TbTil(r1),"|")(0)&"</td>"
next
tr1="<tr>"&tr1&"</tr>"
for ri=0 to iTblRow
for ci=0 to iTblCol
td=td&"<td width='"&split(TbTil(ci),"|")(1)&"'>"&tbRs(ci,ri)&"</td>"
next
tr=tr&"<tr>"&td&"</tr>"
td=null
next
TbTil=null
tbRs=null
response.Write(tbStr&tr1&tr&"<tr><td colspan='"&iTblCol+1&"'>"&pageNav()&"</td></tr></tbody></table>")
tbStr=null
tr1=null
tr=null
End Function
'打印sql语句,以便语句有错误时检查
Public Sub prnSql()
response.Write(strsql)
End Sub
'-------------------------------------------------------------------------
'容错函数
'-------------------------------------------------------------------------
Private Function errMsg(errMsg)
If Err.number<>0 Then
'出现问题可利用此处代码打印出描述信息,方便调试。可注释掉
response.Write(Cstr(Err.description)&"<br>")
Err.Clear
Response.Write "<font color='#FF0000'>"&errMsg&"出错</font>" '注释
Response.End()
End If
End Function
'-------------------------------------------------------------------------
'容错函数结束
'-------------------------------------------------------------------------
End Class
%>

我的想法是既然是数据库操作类,所以类一实例化的时候就建立数据库连接,所以在使用的时候要先修改 Class_Initialize()中的代码,设置正确的数据库连接数据,设置好了就可以使用了。


1、一般的操作

set myDb=new dbClass
myDb.sqlStr="select * from ..." '这里设置数据库操作语句
set rs=myDb.rsDB()
'这里返回rs,接着就按平时的写法写表现数据的代码
'.......
myDb.cRs(rs) '关闭释放rs
set myDb=nothing
若myDb.sqlStr设置的是更新、删除或添加的sql语句,那么就要用myDb.upDB()来执行,即


set myDb=new dbClass
myDb.sqlStr="update ..."
myDb.upDB()
set myDb=nothing
2、查询分页---一般的,不用存储过程

mypage=request.form("currpage")'得到需要显示第几页
'mypage为空则说明此页是第一次加载
if mypage="" then
mypage=1
end if
dim myDb
set myDb=new ConDb
with myDb
.tbName="comEmploy" '表名
.pKey="empId" '主键
.pgFields="empId,empGz" '显示的字段
.pgSize=20 '每页显示的条数
.conditions="" '查询的条件
.orderBy="empId desc" '排序的条件
.currPg=mypage
end with
dim rs
set rs=myDb.pageRs()
'根据返回的rs写表现代码
myDb.cRs(rs)
'在适当的地方放放置分页导航
<%=myDb.pageNav()%>
set myDb=nothing
3、查询分页---用存储过程


此处的存储我用的叶子分页类用的存储过程,可在网上查找叶子分页类的相关代码

mypage=request.form("currpage")'得到需要显示第几页
'mypage为空则说明此页是第一次加载
if mypage="" then
ypage=1
end if
dim myDb
set myDb=new ConDb
with myDb
.tbName="comEmploy" '表名
.pKey="empId" '主键
.pgSize=2 '每页显示的条数
.pgFields="empId,empGz" '显示的字段
.conditions="" '查询的条件
.orderBy="empId desc" '排序的条件
.currPg=mypage
end with
dim rs
set rs=myDb.sqlPage()


'根据返回的rs写表现代码
'若查询条件是根据form提交,查询条件可保存在cookie中
myDb.cRs(rs)
'在适当的地方放放置分页导航
<%=myDb.pageNav()%>
set myDb=nothing
4、若你的分页显示没有什么特别的表现形式,还可以直接输入有分页导航的table

tbTil=Array("作者|200","IP地址|150","发布时间|150","具体内容|300")
'作者是表格的第一个字段的名称
'200是此单元格的宽度
mypage=request.QueryString("currpage")'得到需要显示第几页
'mypage为空则说明此页是第一次加载
if mypage="" then
mypage=1
end if
dim myDb:set myDb=new dbClass
with myDb
.tbName="guestBook" '表名
.pKey="id" '主键
.pgFields="mem_Author,mem_PostIP,mem_PostTime,mem_Content" '显示的字段
.pgSize=3 '每页显示的条数
.conditions="" '查询的条件
.orderBy="id desc" '排序的条件
.currPg=mypage
end with
myDb.showTb(tbTil)
set myDb=nothing
5、返回总记录数可以用myDb.vRsCount() 返回总页数可以用myDb.vPgCount()

6、myDb.prnSql()打印sql语句,在出现错误时利用此检查sql语句

下面是用到的样式代码,可作相应修改

程序代码:

table{
border-collapse:collapse;
font-size:12px;
}
td{
border:1px solid #FFCC99;
border-collapse:collapse;
height:30px;
text-align:center;
}
#fy{
/*width:545px;*/
margin-left:350px;
}
#fy span,#fy a{
display:block;
float:left;
height:15px;
}
#fy #rpc{
margin-left:20px;
line-height:20px;
}
#fy a{
border:1px solid #CCCCFF;
width:15px;
text-decoration:none;
margin-left:5px;
color:#993300;
cursor:pointer;
}
#fy a.aW{
width:40px;
color:#000000;
border:none;
line-height:20px;
}
#fy a:hover{
color:#125da7;
/*border:1px solid #F8b3d0;
background-color:#F8b3d0;*/
}
#fy a#currP{
color:#125da7;
border:1px solid #FF0000;
background-color:#FF0000;
/*border:1px solid #F8b3d0;
background-color:#fff5fa;*/
}