[asp] 通用数据库层_存储过程系列_操作方法


考虑到多数人用ASP入门"编程"..偶还是把这些函数_过程发一下.
--------------之所以说是函数库..因为偶把
class dbClass
    '// 我把中间的方法函数 过程Sub 直接拿出来..   也就不是个"类"(累) 了。
ASP整类是真的是有点累 .除了多 Set  db = new dbClass  麻烦一下外 不知道效果到底是否很高?
End Class

不多说。 如果面向对象很习惯用类了。。 OK  你把代码中的 Class dbClass  和 End Class 前注释去掉,.

在写ASP偶还是习惯Call 来调用。。    函数主体代码就不贴了,  虽说谈不上很高级,封装之类.. 但应该能为写ASP的家伙门省一点点事情.    不习惯用CMS的同志适合。

以下是dbClass函数库『可以直接调用完成功能』的Public方法列表:

Public Function Open(ByVal ConStr)              '//参数:ConStr数据库连接字符串,返回成功打开连接对象
Public Sub SetConn(ByVal oCon)                     '//设置Open方法返回的连接对象为当前可以用对象..
Public Function SelectSql(ByVal SqlString,ByVal N,ByVal M)       '//执行sql语句返回rs记录集 N,M为游标
Public Sub SelectText(oRs,ByVal SqlString,ByVal N,ByVal M)       '//过程形式,都个参数 是返回的 记录集对象名称
Public Sub CloseConn()                     '//关闭数据库连接
Public Sub ShowErr(ByVal Str)       '//打印信息 并且停止运行程序
Public Sub Close(ByVal orss)       '//关闭记录集对象 参数为要关闭的记录集名称
Public Function ExeSql(ByVal SqlString)       '//执行非查询sql语句"Insert Update Delete",执行成功返回True,否则返回False
Public Function LookTable(ByVal TableName)'//查询数据库某表是否存在 参数为要查询的数据表名,存在则返回True,否则返回False
Public Function DataTrans(ByVal sqlArray)       '//执行多条数据库,实现数据库事务处理
Public Function SelectLine(ByVal Cols,ByVal WhereStr,ByVal TableName)'//查询某表某字段值,返回该字段值
Public Function Insert(ByVal ArrAddList,ByVal TableName) '// 插入方法,哈希表
Public Function Update(ByVal ArrAddList,ByVal WhereStr,ByVal TableName)'//跟上面方法差不多多了个条件参数
Public Function Delete(ByVal KeyID,ByVal Key,ByVal TableName)       '//删除一条或多条数据
Public Function GetTables(ByVal isCount)'//获得当前库,参数为1返回表的个数(数值型),非1或空返回表名:table|table(字符型)
Public Function GetRows(ByVal table,ByVal where)       '//获得某表符合某条件的记录总数 返回(数值型)
Public Function ExeProcedureArray(cmd,ByVal procedureName,ByVal parameterArray)       '//执行有参数存储过程
Public Function ExeProcedure(cmd,ByVal procedureName)       '//执行无参数存储过程
Public Function GetPreID(ByVal ID,ByVal KeyCols,ByVal TableName)       '//返回当前ID的上一条记录
Public Function GetNextID(ByVal ID,ByVal KeyCols,ByVal TableName)       '//返回当前ID的下一条记录
Public Function SaveXML(ByVal sql,ByVal filePath,ByVal rootName)'// 根据sql语句生成XML




<%
'/******************************
        '类库:dbClass
        '库名称:数据库操作
     '日期:2007-6-8
        '作者:敏哥
     '描述:数据库的各种操作
        '最后修改:2008-3-8

        '******************************/      
'------------------------------------------------------------------------------
'       Public Function Open(ByVal ConStr)              '//参数:ConStr数据库连接字符串,返回成功打开连接对象
'       Public Sub SetConn(ByVal oCon)                     '//设置Open方法返回的连接对象为当前可以用对象..
'       Public Function SelectSql(ByVal SqlString,ByVal N,ByVal M)       '//执行sql语句返回rs记录集 N,M为游标
'       Public Sub SelectText(oRs,ByVal SqlString,ByVal N,ByVal M)       '//过程形式,都个参数 是返回的 记录集对象名称

       '实例:[同时操作三个数据库]'            Set acess = Open(ConStr_acess)       '//Acess数据库连接字符串
'                    Set mssql = Open(ConStr_mssql) '//MSSQL数据库连接字符串
'                    Set mysql = Open(ConStr_mysql)       '//MySql数据库连接字符串
'                    Call SetConn(mysql)       '//当前操作 MySql 数据库 切记:这里不是字符串 是对象类型      
'Set rs = SelectSql("Select UserName FROM [Book] Where ID=1001",1,3)'//1,3是游标,可读写 请参考游标说明
'Call SelectText(rs,"Select UserName FROM [Book] Where ID=1001",1,3)'//同样功能              
' if Not rs.eof Then  '// 上面返回rs记录集 就可以写操作代码了..
'把上面 Call SetConn(这里换成"acess"或者 "mssql") 可以达到随时切换数据库
'如果只有一个数据库 可以简化写成  Call SetConn(Open("数据库连接字符串"))
'SelectSql方法函数 和 SelectText过程  下面有介绍              
'------------------------------------------------------------------------------              
        
'   Public Sub CloseConn()                     '//关闭数据库连接
'       Public Sub ShowErr(ByVal Str)       '//打印信息 并且停止运行程序
'       Public Sub Close(ByVal orss)       '//关闭记录集对象 参数为要关闭的记录集名称
'       Public Function ExeSql(ByVal SqlString)       '//执行非查询sql语句"Insert Update Delete",执行成功返回True,否则返回False
'       Public Function LookTable(ByVal TableName)       '//查询数据库某表是否存在 参数为要查询的数据表名,存在则返回True,否则返回False

'------------------------------------------------------------------------------      
'       Public Function DataTrans(ByVal sqlArray)       '//执行多条数据库,实现数据库事务处理

'       实例 [修改三个表的数据,只要其中一条sql语句执行不成功就返回False,否则返回True]
'       Dim arr(2)       '申明数组大小为3
'       arr(0)="Update [table] Set UserName='ZhongMin'"
'       arr(1)="Delete FROM [Table] Where ID=1001"
'       arr(2)="insert into Table(UserName) Values('ZhongMin')"
'       if DataTrans(arr) then Response.Write("执行成功")
'------------------------------------------------------------------------------      

'------------------------------------------------------------------------------
'       Public Function SelectLine(ByVal Cols,ByVal WhereStr,ByVal TableName)'//查询某表某字段值,返回该字段值

'       实例 [查询Admin表中 Sex字段]
'       Dim re:re=SelectLine("Sex","Where ID=1001","Admin")       '//返回值类型跟数据库字段类型一致
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'       Public Function Insert(ByVal ArrAddList,ByVal TableName) '// 插入方法,哈希表

'       示例: [往admin插入一条数据]
'       Dim ArrayList(2)       '//申明数据列表 数组
'       ArrayList(0)="Sex=男"              '//Sex为数据表中的列名,如果值"男"是变量那就在后面直接 &Sex变量
'       ArrayList(1)="Name="&myName       '//变量赋值 没有类型区分
'       ArrayList(2)="Time="&Now()       '//日期型直接赋值
'       Dim re:re=Insert(ArrayList,"Admin")       '// 数据列表,表名  成功返回True,否则返回:False
'       if re=True Then Response.Write("添加成功")
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'       Public Function Update(ByVal ArrAddList,ByVal WhereStr,ByVal TableName)'//跟上面方法差不多多了个条件参数

'// 示例: [修改admin一条数据]
'//       Dim ArrayList(1)       '//申明数据列表 数组
'       ArrayList(0)="Name="&myName       '//变量赋值 没有类型区分
'       ArrayList(1)="Time="&Now()       '//日期型直接赋值
'       Dim re:re=Update(ArrayList,"Where ID=1001","Admin")       '// 数据列表,条件where,表名  成功返回True,否则返回:False
'       if re=True Then Response.Write("修改成功")
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'       Public Function Delete(ByVal KeyID,ByVal Key,ByVal TableName)       '//删除一条或多条数据

'// 示例: [修改admin一条数据]
'//       Dim ID:ID=Request("ID")       '//删除的记录ID号,可以是多条例如: 1,2,3
'//       Dim re:re=Delete(ID,"以数据表字段ID查询主键","Admin")
'       if re=True Then Response.Write("删除成功")
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'       Public Function GetTables(ByVal isCount)'//获得当前库,参数为1返回表的个数(数值型),非1或空返回表名:table|table(字符型)

'// 示例 [获得当前数据库的表名]
'//       Response.Write GetTables(1)       '//输出: 3
'//       Response.Write GetTables(0)       '//输出:  "admin|User|Book"
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'       Public Function GetRows(ByVal table,ByVal where)       '//获得某表符合某条件的记录总数 返回(数值型)

'       Response.Write GetRows("Admin","Where ID=1001") 输出: 1
'       Response.Write GetRows("Admin","") 输出: 5     '//条件参数为空查询所有 表里有5条数据
'------------------------------------------------------------------------------

'       Public Function ExeProcedureArray(cmd,ByVal procedureName,ByVal parameterArray)       '//执行有参数存储过程
'       Public Function ExeProcedure(cmd,ByVal procedureName)       '//执行无参数存储过程
'       上面的 cmd 参数下面会用到,名称根据传入保持一致.
'------------------------------------------------------------------------------
'       示例: [执行有参数存储过程 "Pro_Page"]
'   下面会给出此万能分页存储过程代码的,存储过程为网上提供.

'// 存储过程[Pro_Page] 参数解释如下:
'// 参数:tableName        :表名
'// 参数:strFields        :返回列
'// 参数:fldName          :排序字段
'// 参数:pSize                     :页值
'// 参数:pIndex              :当前页
'// 参数:doCount              :非0返回统计数
'// 参数:OrderType              :非0则升序排序
'// 参数:strWhere              :条件语句 免写where字符
'// 参数: rsCount              :记录集总数

'// 到这里得还介绍个方法函数 CreateParameter
'       原型: Function CreateParameter(ByVal ParName,ByVal ParType,ByVal returnType,ByVal ParLen,ByVal ParValue)
'       解释参数:CreateParameter(参数名称,参数类型,返回类型,参数数组长度,参数值)

'// ASP可以使用如下代码:
'       Dim rss(7)       '//申明参数列表 数组
'       rss(0)=CreateParameter("@tblName",200,1,500,tableName)
'       rss(1)=CreateParameter("@strGetFields",200,1,1000,strFields)
'       rss(2)=CreateParameter("@fldName",200,1,255,fldName)
'       rss(3)=CreateParameter("@PageSize",3,1,500,pSize)
'       rss(4)=CreateParameter("@PageIndex",3,1,500,pIndex)
'       rss(5)=CreateParameter("@doCount",3,1,500,doCount)
'       rss(6)=CreateParameter("@OrderType",3,1,500,OrderType)
'       rss(7)=CreateParameter("@strWhere",200,1,1500,strWhere)
'// 有人可能对其中的 200,500,1,3 看不懂  这里可以搜索 存储过程参数类型 可以找到介绍
'       Set rs = ExeProcedureArray(cmd,"Pro_Page",rss)       '//调用方法 执行Pro_Page有参存储过程 返回记录集
'       如果定义了存储过程定义了输出参数 那就可以用 Response.Write cmd("输出参数名")

'// 无参数存储过程就好介绍了
'       Set rs = ExeProcedureArray(cmd,"pp_Page")       '//调用方法 执行pp_Page无参存储过程 返回记录集
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'       Public Function GetPreID(ByVal ID,ByVal KeyCols,ByVal TableName)       '//返回当前ID的上一条记录
'       Public Function GetNextID(ByVal ID,ByVal KeyCols,ByVal TableName)       '//返回当前ID的下一条记录
'示例: [当前ID=3,查询上一条记录 和 下一条记录]
'//       Dim ID:ID=Request("ID")
'       Response.Write GetProID(ID,"ID","Admin")       '//输出:4
'       Response.Write GetNextID(ID,"ID","Admin")       '//输出:2
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
'       Public Function SaveXML(ByVal sql,ByVal filePath,ByVal rootName)'// 根据sql语句生成XML

'// 示例: [生成查询admin表的xml数据,xml文件名为当前目录adminXmlFile.xml,xml文件根节点为 adminRoot ]
'//       Dim re:re=SaveXML("Select ID,Name,Sex FROM [Admin]",Server.MapPath("adminXmlFile.xml"),"adminRoot")
'// if re then Response.Write("生成成功!!")

'// 生成的XML数据预览
'<?xml version="1.0" encoding="gb2312" ?>
'<adminRoot>
'     <Admin>
'          <ID>1001</ID>
'          <Name>ZhongMin</Name>
'          <Sex>男</Sex>
'     </Admin>
'</adminRoot>


结合_存储过程进一步扩展代码
Asp:

'// 参数解释如下:
'// 参数:tableName        :表名
'// 参数:strFields        :返回列
'// 参数:fldName          :排序字段
'// 参数:pSize                     :页值
'// 参数:pIndex              :当前页
'// 参数:doCount              :非0返回统计数
'// 参数:OrderType              :非0则升序排序
'// 参数:strWhere              :条件语句 免写where字符
'// 参数: rsCount              :记录集总数

'// 得到查询记录总数       :Function GetTableCount(tableName,strWhere)
'// 得到查询记录集              :Function GetTabRows(tableName,strFields,fldName,pSize,pIndex,OrderType,strWhere)

示例: 用存储过程查询 admin 表 type 字段为 'zhongmin' 的值  并且分页
Dim rsPageSize:rsPageSize=20      '//每页显示记录数
Dim w:w="type='zhongmin'"        '//查询条件
Dim rsCount:rsCount=GetTableCount("Admin",w)    '// 查询到记录总数
Set rs =GetTabRows("Admin","ID,Name,Sex","ID",rsPageSize,1,1,w)  
if not rs.eof then
    Do while not rs.eof
       '// 循环体
   rs.MoveNext
Else
  Response.write("没有记录")
End if

Call ShowPage(rsPageSize,rsCount)  '// 分页
Call Close(rs)

asp 代码文件:







下载文件 点击下载此文件


sql 存储过程代码:
复制内容到剪贴板代码:
Create PROCEDURE Pro_Page
@tblName varchar(500), -- 表名
@strGetFields varchar(1000) = '', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from ' + @tblName + ' where '+@strWhere
else
set @strSQL = 'select count(*) as Total from ' + @tblName + ''
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况:
else
begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '
from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '
from '+ @tblName + ' '+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码 
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where [' + @fldName + ']' + @strTmp + '(['+ @fldName + '])
from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + ']
from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from ' + @tblName + ' where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
exec (@strSQL)
GO


附上 ASP 操作 xml 的详细代码:  





http://bbs.blueidea.com/thread-2901174-1-5.html



文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 692
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 20 字 | UBB代码 关闭 | [img]标签 关闭