基于javascript的asp数据库操作类,含分页、字符串截取、用户登陆验证[原创]

2005.01.15发表于blog.csdn.net/zxub

  无聊又用了用asp,发现还是不爽,已经习惯了面向对象了,就想改进了,vbscript不用,感觉看起来很不爽,就用javascript写了下面个类:
<%
//
//            //
//    用Javascript实现的一个数据库操作类        //
//               //
//
 function DBOperate()
 {
  this.DBType=0;  //数据文件类别号,用以实现获取不同的表
        this.DBPath="";  //数据库文件相对站点的存放地址
  this.ConnString; //连接字符串
  this.Conn; //数据库连接对象
  this.RS;   //数据集
  this.SQLString;  //操作数据库的SQL语句
  this.GetDBPath=GetDBPath;  //获取数据库路径
  this.RSMoveType=1; //纪录集移动方式:
                   //0为只读,当前数据记录只能向下移动;
                   //1为只读,当前数据记录可自由移动;
                   //2为可读写,当前数据记录可自由移动;
                   //3为可读写,当前数据记录可自由移动,可看到新增记录
       //RS.MoveFirst(),RS.MoveLast(),RS.MoveNext(),RS.MovePrevious().
       //RS.Move(n) 方法:从当前位置移动n条记录,n>0为正向,n<0为反向,
       //RS.Move(n,1) 方法:从第一条纪录处移动n条记录,n>0,后面的参数只能为1
  this.RSLockType=1; //纪录集锁定方式:
                   //1为缺省锁定类型,记录集是只读的,不能修改记录
       //2为悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。
                   //3为乐观锁定,直到用Update方法提交更新记录时才锁定记录。
                   //4为批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。
  //*************************************************************************
  //当分页的时候,计算TotalRecordCount和TotalPageCount
  //*************************************************************************
  this.TotalRecordCount=0;  //纪录集总纪录数,开始由于没纪录集,所以为0
  this.PageSize=10;    //每页最大纪录数,默认为10
  this.TotalPageCount=0;  //最大页数. 
  //*************************************************************************
  this.CurrentPageID=1;  //当前页码,默认为1
  this.CurrentPageTag="CurrentPageID";
  this.GotoPageName="";  //显示纪录的页面名称,默认为当前页面
  function GetDBPath()
  {
   switch (this.DBType)
   {
    case 1:
     this.DBPath="/data/#info.asp";
     break;
    case 2:
     this.DBPath="/data/#members.asp";
     break;
    case 3:
     this.DBPath="/data/#tradeinfo.asp";
     break;
    default:Response.Write("数据类别号有误!");Response.End;break;
   }
   if (this.DBPath!=null)
   {
    this.ConnString="Provider=microsoft.jet.oledb.4.0;data source="+Server.MapPath(this.DBPath);
   }
  }
  this.DBOpen=DBOpen;
  function DBOpen()  //打开数据库
  {
   try
   {
    this.Conn=Server.CreateObject("ADODB.Connection");
    this.Conn.Open(this.ConnString);
   }
   catch (e)
   {
    Response.Write("数据库连接错误!");
    Response.End();
   }   
  }
  this.DBClose=DBClose;
  function DBClose()  //关闭数据库
  {
   if (this.Conn!=null)
   {
    this.Conn.Close();
    this.Conn=null;
   }
  }
  this.GetRS=GetRS;
  function GetRS()  //产生一个数据集对象
  {
   if (this.Conn!=null)
   {
    var i=Request.QueryString(this.CurrentPageTag).Count;
    if (i>0)
    {
     this.CurrentPageID=parseInt(Request.QueryString(this.CurrentPageTag));
     if (this.CurrentPageID<=0)
     {
      this.DBClose();
      Response.Write("页码超出合法范围!");
      Response.End();
     }
    }
    this.RS=Server.CreateObject("ADODB.RecordSet");
    this.RS.Open(this.SQLString,this.Conn,this.RSMoveType,this.RSLockType);
    this.TotalRecordCount=this.RS.RecordCount;
    this.TotalPageCount=Math.ceil(this.TotalRecordCount/this.PageSize);
    var EndPage=this.TotalPageCount;
    if (EndPage==0) EndPage=1;
    if (this.CurrentPageID>EndPage)
    {
     this.DBClose();
     Response.Write("页码超出合法范围!");
     Response.End();
    }
   }    
   else
   {
    Response.Write("没有连接到数据库!");
    Response.End();
   }
  }
  this.CloseRS=CloseRS;
  function CloseRS() //关闭数据集对象
  {
   if (this.RS!=null)
   {
    this.RS.Close();
    this.RS=null;
   }
  }
  this.DBExecSQL=DBExecSQL;
  function DBExecSQL()  //执行SQL语句,用于执行添加、删除、修改操作
  {
   if (this.Conn!=null)
   {
    this.Conn.Execute(this.SQLString);
   }
   else
   {
    Response.Write("没有连接到数据库!");
    Response.End();
   }
  }
  this.RSIsEmpty=RSIsEmpty;
  function RSIsEmpty()
  {
   if (this.RS!=null)
   {
    if ((this.RS.BOF) && (this.RS.EOF))
    {
     //RS is empty
     return true;
    }
    else
    {
     //RS not empty
     return false;
    }
   }
   else
   {
    Response.Write("没有连接到数据库!");
    Response.End();
   }   
  }
  this.SetPager=SetPager;
  function SetPager()
  {
   var PreviousPageID=this.CurrentPageID-1;
   var NextPageID=this.CurrentPageID+1;
   var HomePage=1;
   var EndPage=this.TotalPageCount;
   //************************************************************
   /*this.RS.MoveFirst();
   this.RS.Move((this.CurrentPageID-1)*this.PageSize,1);
   var j=0;
   while (!this.RS.eof && j<this.PageSize)
   {
    Response.Write(this.RS("type")+"<br>");
    j=j+1;
    this.RS.MoveNext();
   }*/
   //************************************************************   
   var PagerString="";
   PagerString+="<table width=\"100%\" height=\"25\"  border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:9pt\">";
   PagerString+="<tr>";
   PagerString+="<td align=\"right\" valign=\"middle\">合计 <strong><font color=\"#FF0000\">";
   PagerString+=this.TotalRecordCount;
   PagerString+="</font></strong> 个 | ";
   if (this.CurrentPageID==HomePage)
   {
    PagerString+="<A disabled>首页</A> <A disabled>上一页</A> ";
   }
   else
   {
    PagerString+="<A href="+this.GotoPageName+"?"+this.CurrentPageTag+"="+HomePage+">首页</A> <A href="+this.GotoPageName+"?"+this.CurrentPageTag+"="+PreviousPageID+">上一页</A> ";
   }
   if (this.CurrentPageID==EndPage)
   {
    PagerString+="<A disabled>下一页</A> <A disabled>尾页</A> </td>";
   }
   else
   {
    PagerString+="<A href="+this.GotoPageName+"?"+this.CurrentPageTag+"="+NextPageID+">下一页</A> <A href="+this.GotoPageName+"?"+this.CurrentPageTag+"="+EndPage+">尾页</A> </td>";
   }
   PagerString+="<td width=\"120\" align=\"center\" valign=\"middle\">页次:<strong><font color=\"#FF0000\">";
   PagerString+=this.CurrentPageID;
   PagerString+="</font>/";
   PagerString+=this.TotalPageCount+"&nbsp;";
   PagerString+=this.PageSize+"</strong>个/页 </td>"
   PagerString+="<td width=\"36\" align=\"right\" valign=\"middle\">转到: </td>"
   PagerString+="<td width=\"76\" align=\"left\" valign=\"middle\">";
   PagerString+="<select size=1 name=CurrentPage style='font-size:9pt;width:60px' οnchange=\"document.location=\'"+this.GotoPageName+"?"+this.CurrentPageTag+"=\'+this.options[this.selectedIndex].value\">";
   for (i=1;i<=this.TotalPageCount;i++)
   {
    if(this.CurrentPageID==i)
    {
     PagerString+="<option selected value="+i+">第"+i+"页</option>";
    }
    else
    {
     PagerString+="<option value="+i+">第"+i+"页</option>";
    }
   }
   PagerString+="</select>";
   PagerString+="</td>";
   PagerString+="</tr>";
   PagerString+="</table>" 
   if (EndPage>0)
   {
    return(PagerString);
   }
   else
   {
    return("");
   }
  }
 } 
%>
<%
//
//            //
//    字符串操作                                //
//               //
//
   function CutString(InputString,AppendString,CutLen)
  {
   InputString=String(InputString);
   AppendString=String(AppendString);
   var FactLen=0,TempString="",i;
   var Strlength=InputString.length;
   for (i=0;i<Strlength;i++)
   {
    if (InputString.charCodeAt(i)>255)
    {
     FactLen+=2;
    }
    else
    {
     FactLen+=1;
    }    
    if (FactLen>CutLen)
     break;    
    try
    {
     TempString+=InputString.substr(i,1);
    }
    catch (e)
    {
     break;
    }    
   }
   if (FactLen>CutLen)
   {
    TempString+=AppendString;
   }
   return TempString;
  }  
%>
<%
///
//
//  空格及回车的显示                            //
//
//
  function AlignString(obj)
  {
   return String(obj).replace( /[\" "]/g,"&nbsp;").replace(/[\r]/g,"<br>");
  }
%>
<%
//
//            //
//    用Javascript实现的用户身份验证类            //
//               //
//
 function UserLogin()
 {
  this.UnameField="";  //用户名字段名称
  this.PwdField="";  //密码字段名称
  this.LevelField="";  //用户级别字段名称
  this.UserTableName="";  //存放用户信息的表名称
  this.uname="";  //用户名
  this.pwd="";  //密码
  this.SessionOfName="";
  this.SessionOfPwd="";
  this.SessionOfLevel="";
  this.CheckLogin=CheckLogin;  //验证用户是否登陆
  this.ErrorURL="";  //没登陆时转向的页面
  this.OKURL="";  //登陆成功时转向的页面
  function CheckLogin()
  {
   var DBConn=new DBOperate();
   DBConn.DBType=0;
   DBConn.CurrentPageTag="#PID";
   DBConn.ConnString="Provider=microsoft.jet.oledb.4.0;data source="+Server.MapPath("/data/#members.asp");
   DBConn.DBOpen();
   DBConn.SQLString="Select * from "+this.UserTableName+" where "+this.UnameField+"='"+this.uname.replace( /[\']/g,"#").replace( /[\s]/g,"#")+"' and "+this.PwdField+"='"+this.pwd.replace( /[\']/g,"#").replace( /[\s]/g,"#")+"'";
   DBConn.GetRS();
   if (DBConn.RSIsEmpty()==true)
   {
    DBConn.DBClose();
    DBConn=null;
    if (this.ErrorURL!="")
     Response.Redirect(this.ErrorURL);
   }
   else
   {
    if (this.SessionOfName!="")
    {
     Session(this.SessionOfName)=String(DBConn.RS(this.UnameField));
    }
    if (this.SessionOfPwd!="")
    {
     Session(this.SessionOfPwd)=String(DBConn.RS(this.PwdField));
    }
    if (this.SessionOfLevel!="")
    {
     Session(this.SessionOfLevel)=String(DBConn.RS(this.LevelField));
    }
    DBConn.CloseRS();
    DBConn.DBClose();
    DBConn=null;
    if (this.OKURL!="")
     Response.Redirect(this.OKURL);
   }
  }
 }
%>

  测试页面代码如下:
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>
<!--#include FILE="DBO.asp"-->
<%
var DBobj=new DBOperate();
DBobj.CurrentPageTag="PID";
DBobj.DBType=2;
DBobj.GetDBPath();
DBobj.DBOpen();
DBobj.SQLString="select * from members";
DBobj.PageSize=4;
DBobj.GetRS();
//********************************************************************
if (!DBobj.RSIsEmpty())
{
DBobj.RS.MoveFirst();
DBobj.RS.Move((DBobj.CurrentPageID-1)*DBobj.PageSize,1);
var j=0;
while (!DBobj.RS.eof && j<DBobj.PageSize)//
{
 Response.Write(DBobj.RS("name")+"<br>");
 j=j+1;
 DBobj.RS.MoveNext();
}
}
//*********************************************************************
Response.Write("<br>");
//*********************************************************************
Response.Write(DBobj.SetPager());   //分页导航条高度为25
//*********************************************************************
Response.Write(CutString("啊撒123娇散件 aaaa","#",8));
var Uobj=new UserLogin();
Uobj.UnameField="uname";
Uobj.PwdField="upwd";
Uobj.LevelField="ulevel";
Uobj.UserTableName="uadmi";
Uobj.uname="sadmin";
Uobj.pwd="sadmin";
Uobj.OKURL="";
Uobj.ErrorURL="2.htm";
Uobj.SessionOfName="aaa";
DBobj.CloseRS();
DBobj.DBClose();
DBobj=null;
Uobj.CheckLogin();
Response.Write(Session(Uobj.SessionOfName));
%>
  具体效果把上面的代码存成2个asp文件测试就知道了,不多说了。

转载于:https://www.cnblogs.com/zxub/archive/2005/06/13/173593.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

atcoder A - Frog 1(DP)

A - Frog 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There are NN stones, numbered 1,2,…,N1,2,…,N. For each ii (1≤i≤N1≤i≤N), the height of Stone ii is hihi. There is a frog who is initially on Stone 11. He will…

物联网通讯协议:MQTT,NB-IOT,Zigbee,CoAP,RFID,BLUETOOTH,NFC,4G,HTTP

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

【转】关于WaterFall瀑布流式布局的性能优化

市面上已存在的瀑布流式布局的网站&#xff1a;拼范网&#xff1a;http://www.pinfun.com/迷尚网&#xff1a;http://www.mishang.com/凡客达人&#xff1a;http://star.vancl.com/美丽说&#xff1a;http://www.meilishuo.com/蘑菇街&#xff1a;http://www.mogujie.com/welco…

微软OTech第二次会议(广州站)

很荣运又有机会参与微软的活动&#xff0c;也很高兴能加入到旨在促进Office技术交流的俱乐部(OTEC)&#xff0c;在这里让我对Office有了更深入的理解&#xff0c;目前的Office远非以前Office所能比拟。也远不止简单的Word、Excel电子文档表格办公自动化这些功能。目前中国大陆O…

Work Tips

目录IAR环境下&#xff0c;使用Live Watch实时监控变量值IAR替换mcu库Linux中删除swp文件使用J-Link通过SWD接口直接下载.hex文件和.bin文件到MCU(下载J-Flash软件)linux设置时间命令Jlink无法识别排查方法IAR环境下&#xff0c;使用Live Watch实时监控变量值 循环放在数组里&…

ECMA6--字符串/数组

字符串 新增两个字符串方法 startsWith&#xff08;&#xff09; 字符串首开通检测 endsWith&#xff08;&#xff09; 后缀名检测 includes &#xff08;&#xff09; 字符串中是否包含 字符串模板 数组 let title 头部 let content 内容 let a <div>\<p>titl…

[总结]DataGrid 固定表头实现(纵向和横向滚动条滚动,而Header不动)

1.用Css来定制DataGrid表头HeaderStyle的cssclass属性.fixTitle{ /*background: navy; color: white;*/ position: relative; top: expression(this.offsetParent.scrollTop);} 1<DIV style"Z-INDEX: 102; LEFT: 264px; OVERFLOW: auto; WIDTH: 184px;TOP: 128px; HEIG…

Fedora 20 安装后的一些事情

1、关闭selinux 可以在软件中,找到selinux管理工具:system-config-selinux.py 2、安装源 可以通过# ls -l /etc/yum.repos.d 查看现有的安装源,另外还可以给一些其他软件源&#xff1a; 添加remi,Remi repository 是包含最新版本 PHP 和 MySQL 包的 Linux 源&#xff0c;由 Rem…

STM32使用SPI通信驱动2.4G无线射频模块发送数据

目录SPI介绍SPI接口原理SPI工作原理SPI特征引脚配置结构体库函数SPI配置过程SPI.hSPI.cNRF24L01无线射频模块NRF24L01厂家驱动代码移植NRF24L01.hNRF24L01.cmain.c串口打印调试SPI介绍 SPI接口原理 SPI工作原理 SPI特征 引脚配置 结构体 库函数 SPI配置过程 SPI.h #ifndef __…

1.Rabbitmq学习记录《本质介绍,协议AMQP分析》

1.RabbitMQ是一个由erlang开发的AMQP&#xff08;Advanced Message Queue &#xff09;的开源实现。 RabbitMQ的优势-: 除了Qpid&#xff0c;RabbitMQ是唯一一个实现了AMQP标准的消息服务器&#xff1b; 可靠性&#xff0c;RabbitMQ的持久化支持&#xff0c;保证了消息的稳定性…

“Unamed VM”无法初始化 0x80070539

当我们重新安装Windows Server 2012 R2以后&#xff0c;之前Hyper-V的虚拟机没有进行导出&#xff0c;那么我们重新导入虚拟机成功以后&#xff0c;启动它遇到了如下错误&#xff1a; 那么怎么办呢&#xff1f;用下面的poweshell命令就可以解决 Grant-VmConnectAccess -usernam…

要回家了,想到以后..

过几天就要回家了,剩下的工作还有一点没有完成.不过已经是无关大碍了.突然有种很烦的感觉.想想这个暑假的时间里面自己也算是经历不少了,可是回忆一下自己到底收获了什么,脑子里面却是一片空白,什么都想不到.本来是要动笔写篇"我的深圳之行"之类的东西的,可是却没有一…

JSON数据格式解析库(cJSON、Jansson)的使用在STM32上移植和使用

json | json-c使用入门 这篇讲的也不错&#xff0c;抽空看下(网络传输json数据) https://www.bilibili.com/video/av669454528?p3&spm_id_frompageDriver 目录轻量级C语言JSON解析库1.JSON与cJSONJSON —— 轻量级的数据格式JSON语法规则cJSON2.cJSON数据结构和设计思想3.…

cytoscape操作经验

1.cytoscape批量修改节点属性&#xff1f;首先要创建一个节点属性文档&#xff08;.txt),比如说drug1 1drug2 1complex1 0complex2 0第一列是名字&#xff0c;第二列是属性&#xff0c;用空格分开&#xff1b;然后导入节点属性&#xff0c;在Vizmapper中下拉的visual mapping b…

[ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵

https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法&#xff0c;听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵&#xff0c;开始想的是dp[2000][2000][2]维护这个位置向上向左扩充的矩阵最大长度之后n扫一遍&#xff0c;但是写起来发现并不…

TEA、XTEA、XXTEA加密解密算法

参考&#xff1a;TEA、XTEA、XXTEA加密解密算法 地址&#xff1a;https://blog.csdn.net/gsls200808/article/details/48243019 其他相关博文链接&#xff1a;tea系列加密算法学习笔记、TEA和XxTEA跨平台加密算法 XXTEA可以直接加密解密字符串吗&#xff1f; 如果是字符串加密&…

用户自定义的数据库备份(选自csdn\blog)

用户自定义的数据库备份 备份类型 备份方法 示例 数据文件 操作系统命令或工具 C:\COPY datafile1.ora datafile.bak 归档重做日志文件 操作系统命令或工具 C:\COPY log_01_23.arc log_01_23.bak 控制文件 SQL命令 SQL>ALTER DATABASE BACKUP CONTROLFILE TO confile.bak; …

WIFI 配网方式(AP模式、Smartconfig等模式)

参考&#xff1a;智能设备WIFI配网方式汇总 地址&#xff1a;https://blog.csdn.net/beauytlife_1985/article/details/87539350?spm1001.2014.3001.5502 参考&#xff1a;Wifi设备配网问题 地址&#xff1a;https://blog.csdn.net/boazheng/article/details/90906184 目录概述…

动态显示产品信息

为什么80%的码农都做不了架构师&#xff1f;>>> 今天做了个产品介绍的功能,想到只是简单的显示信息实在是无聊,那就让它动态的一个一个显示出来好了. 效果展示:http://runjs.cn/detail/topt9b26 主要的代码如下 html: info里面保存着产品的信息. <div id"c…

ALGO-162——Airport Configuration

问题描述&#xff1a;ACM机场是一个本地机场&#xff0c;对于大多数人来说&#xff0c;机场不是他们的终点或起点&#xff0c;而是中转站。机场有一个规划图。到达的大门在机场的北边&#xff08;相当于空格&#xff09;。出发的大门在机场的南边&#xff08;也相当于空格&…