使用Javascript面向对象的思想编写ASP

作者:jlmqq 来源:无忧脚本 时间:2008-06-16 12:20:00 

VBScript似乎已经成为ASP服务器端开发的首先语言,VBScript函数库丰富、而且使用起来也很容易上手,即使平时不太编程的朋友,只要稍微花点时间研究一下就能写出功能不赖的脚本程序了。

这次想使用的服务器端脚本并非Vbscript而是Javascript,其实Javascript也是ASP所支持的脚本语言,只是,大家平时很少用在服务器端的开发,而更多的都使用在客户端的环境。

OK!关于Javascript的相关知识这里就不多阐述了,坛子里面多的很,自己去搜索一下吧。

现在进入正题,接触过Javascript的朋友都应该知道它是一种基于对象的脚本语言,虽然不象C++、Java那样真的正面向对象,但是也能模拟面向对象的思想。这里采用面向对象的方式来写,这样做的目的也是为了今后在维护上更加方面、代码逻辑更加清晰明了。

Step 1 建立一个sys_conf.asp文件,用来定义数据库环境变量的。代码如下:

<% 
//定义数据库环境变量 
function sys_conf() { 
//数据库登陆帐号 
this.dbuser = "jimmy"; 
//数据库登陆密码 
this.dbpwd = "*******"; 
//数据库名称 
this.dbname = "course"; 
//SQL SERVER服务器 
this.dbhost = "(local)"; 

%> 

请注意,第一行

<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>

这一句一定要写上,因为ASP默认设置是VBSCRIPT。但是如果你在IIS中设置默认语言是#的话,那么也可以不写。建议大家还是写上比较好,接着就是一些数据库的环境变量了。

Step 2 建立class_database.asp的数据库类文件,代码如下:

<!--#Include file="sys_conf.asp"--> 
<% 
/*----------------------------------------------*/ 
//数据库类database 
//构造函数 
//参数 : 无 
/*----------------------------------------------*/ 
function database() { 
//建立数据库环境变量对象 
//私有属性 
var sys_conf_obj = new sys_conf(); 
var host = sys_conf_obj.dbhost; 
var user = sys_conf_obj.dbuser; 
var pwd = sys_conf_obj.dbpwd; 
var name = sys_conf_obj.dbname; 
//公共属性 
this.conn = ""; 
this.rs = ""; 
//连接数据库 
try { 
  this.conn = Server.CreateObject("ADODB.CONNECTION"); 
  this.conn.open("PROVIDER=SQLOLEDB.1;Data Source=" + host + ";Initial Catalog=" + name + ";Persist Security Info=True;User ID=" + user + ";Password=" + pwd + ";Connect Timeout=30"); 
  if(this.conn.state == 1) { 
   this.rs = Server.CreateObject("ADODB.RECORDSET"); 
   this.rs.ActiveConnection = this.conn; 
  } 
}
catch(e) { 
  this.conn = null; 
  Response.Write ("The database connection makes a mistake, please inspect connects the string."); 
  Response.End(); 

}
/*----------------------------------------------*/ 
//公共方法:create_rs() 
//作用 : 创建记录集对象 
//返回值:无 
/*----------------------------------------------*/ 
database.prototype.create_rs = function() { 
   this.rs = Server.CreateObject("ADODB.RECORDSET"); 
   this.rs.ActiveConnection = this.conn; 
}
/*----------------------------------------------*/ 
//公共方法:close_rs() 
//作用 :释放记录集对象 
//返回值:无 
/*----------------------------------------------*/ 
database.prototype.close_rs = function() { 
   this.rs.close(); 
   this.rs = null; 

  
/*----------------------------------------------*/ 
//公共方法:close_database() 
//参数 : 无 
//作用 : 释放数据库连接对象 
//返回值:无 
/*----------------------------------------------*/ 
database.prototype.close_database = function() { 
  this.conn.close(); 
  this.conn = null; 

  
/*----------------------------------------------*/ 
//公共方法:query() 
//参数 : sql - sql语句 max - 最大记录数 
//作用 : 将记录集对象转换为二维数组 
//返回值:记录集数组 
/*----------------------------------------------*/ 
database.prototype.query = function(sql,max) { 
  var i,j,fieldslen,len,vdata,data=[],sp; 
  this.rs.Open(sql),this.conn,1,1; 
  if(this.rs.EOF || this.rs.BOF) { 
   this.close_rs(); 
   return null; 
  } else { 
   vdata = this.rs.GetRows().toArray(); 
   //获取数据表的字段数 
   fieldslen = this.rs.fields.count; 
   this.close_rs(); 
   //开始转换数组 
   //得到记录数 
   len = vdata.length/fieldslen; 
   if(typeof(max) == "undefined") { 
    //遍历所有记录 
    //i:记录号 j:字段号 
    for(i=0;i<len;i++) { 
     data = new Array(); 
     //指针指向下一条记录的首字段 
     sp = i * fieldslen; 
     for(j=0;j<fieldslen;j++) 
      data[j] = vdata[sp+j]; 
    } 
   }else{ 
    //显示指定的记录数 
    for(i=0;i<max;i++) { 
     if(i>=len) break; 
     data = new Array(); 
     //指针指向下一条记录的首字段 
     sp = i * fieldslen; 
     for(j=0;j<fieldslen;j++) 
      data[j] = vdata[sp+j]; 
    } 
   } 
   return data; 
  } 

  
database.prototype.update = function(sql) { 
  if(typeof(sql) == "undefined") { 
   return; 
  } else { 
   this.conn.Execute(sql); 
  } 
}
%>

注意,这里采用的是记录集的GetRows()方法来得到一个数组,然后使用Javascript中的toArray()函数将它转换为一个#的数组。用GetRows()方法得到的数组是个二维数组,用VBSCRIPT很轻松就可以输出数组中的记录了,但是在JAVASCRPT中是没有二维数组的直接转换函数的,用toArray()转换的也只是一个一维数组,所以就要我们自己来将这个一维数组转换为二维数组了。

Step 3 建立一个view.asp来查看数据库中的记录。代码如下:

<!--#Include file="class_database.asp"--> 
<% 
var database_obj = new database(); 

database_obj.connection(); 

str_sql = "Select CourseID,CourseName,UpdateTime,CommDateTime,Comm,Hit From Course Order by UpdateTime Desc"; 

var tmp_arr = database_obj.query(str_sql); 
if(!tmp_arr) { 
      Response.Write("no data..."); 
} else { 
// 循环输出数据 
for(var y=0;y<tmp_arr.length;y++) { 

    // 注意,数组下标从0开始 

    // 显示数据库中数据 

    Response.Write("CourseID: "+tmp_arr[y][0]+", CourseName: "+tmp_arr[y][1] + ",UpdateTime: "+tmp_arr[y][2]); 




database_obj.close_database(); %>

这里的代码就很简单了。主要是调用class_database.asp中的query()方法得到真正的二维数组(也就是我们自己转换的二维数组),然后用循环逐一输出数据。

好了,到此处应该可以搞一段落了。总结一下思路,首先我们使用一个sys_conf()对象来定义数据库的环境变量,这样做的好处就是以后变量修改很方便。接着定义数据库类文件database(),其中封装了一些常规的方法,诸如,连接数据库、关闭数据库、建立记录集等。最重要的还是query()方法,它使用记录集的GetRows()方法将记录集返回一个Vbscript的二维数组,而后使用Javascript中的toArray()函数来转换成一个一维的数组,刚才说了,Javascript中是没有直接转换二维数组的函数,最后将它转换成我们需要的二维数组。当然如果你不习惯这种方法也可以使用常规的记录集的方法来逐一输出数据,这个主要是看个人的习惯了。

现在的问题是,如果数据库中的记录很多,象这样逐一输出数据肯定不可行,那么就得采取分页的形式了。关于这个我想放在下一次来说。以上的代码只是抛砖引玉,希望能够给大家得到一些编程上的启发,如果能这样的话,我已经很高兴了。由于个人水平有限,如果有哪些地方写得不妥,还请大家多多指正,在此谢过了!

标签:面向对象,javascript,asp,编程
0
投稿

猜你喜欢

  • Python 机器学习工具包SKlearn的安装与使用

    2023-11-10 13:13:05
  • Linux上MySql远程备份方案

    2010-11-25 17:23:00
  • 记录一篇关于redux-saga的基本使用过程

    2023-07-15 16:43:19
  • 在thinkphp5.0路径中实现去除index.php的方式

    2024-05-11 09:54:34
  • 无闪烁更新网页内容JS实现

    2024-05-09 10:37:18
  • 防止Access 2000密码被破译的方法

    2008-11-20 16:48:00
  • Python之str操作方法(详解)

    2021-07-21 09:14:16
  • SQLServer设置客户端使用IP地址登录的图文详解

    2024-01-21 10:45:07
  • 解决Python 进程池Pool中一些坑

    2023-12-21 00:24:31
  • ASP下批量删除数据的两种方法

    2011-02-05 11:01:00
  • Python Flask 上传文件测试示例

    2021-01-08 05:51:34
  • Go语言学习技巧之如何合理使用Pool

    2024-02-05 08:04:47
  • python操作数据库之sqlite3打开数据库、删除、修改示例

    2024-01-26 15:47:01
  • ASP运行出错:缺少对象: xmlDoc.documentElement错误解决方法

    2012-11-30 20:40:52
  • 史上最简单的MySQL数据备份与还原教程(中)(三十六)

    2024-01-24 08:40:56
  • Mysql中日期和时间函数介绍

    2008-05-24 08:16:00
  • Python 如何在字符串中插入变量

    2023-02-16 11:06:27
  • Python连接MySQL数据库的简单便捷方法

    2024-01-18 22:46:11
  • TensorFlow和keras中GPU使用的设置操作

    2023-08-07 20:32:53
  • Pycharm配置anaconda环境图文教程

    2023-11-10 02:18:20
  • asp之家 网络编程 m.aspxhome.com