[转]使用JAVASCRIPT作为ASP的服务器端语言(一)

VBSCRIPT似乎已经成为ASP服务器端开发的首先语言,VBSCRIPT函数库丰富、而且使用起来也很容易上手,即使平时不太编程的朋友,只要稍微花点时间研究一下就能写出功能不赖的脚本程序了。
这次我想使用的服务器端脚本并非是VBSCRIPT而是JAVASCRIPT,其实JAVASCRIPT也是ASP所支持的脚本语言,只是,大家平时很少用在服务器端的开发,而更多的都使用在客户端的环境。
OK!关于JAVASCRIPT的相关知识这里就不多阐述了,如果有不清楚的可以查阅相关文献、资料。这类东东在网上到处都是,BAIDU、GOOGLE一下都出来了。
现在进入正题,接触过JAVASCRIPT的朋友都应该知道它是一种基于对象的脚本语言,虽然不象C++、JAVA那样真的正面向对象,但是也能模拟面向对象的思想。这里我采用面向对象的方式来写,这样做的目的也是为了今后在维护上更加方面、代码逻辑更加清晰明了。

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

<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>
<%
//定义数据库环境变量
function sys_conf() {
this.dbuser = "sa";
this.dbpwd = "xxx";
this.dbname = "bookshop";
this.dbhost = "(local)";
}
%>

请注意,第一行<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>这一句一定要写上,因为ASP默认设置是VBSCRIPT。但是如果你在IIS中设置默认语言是JAVASCRIPT的话,那么也可以不写。建议大家还是写上比较好,接着就是一些数据库的环境变量了。

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

<%
<!--#Include file="sys_conf.inc"-->
<%
//数据库类文件

function database() {
//建立数据库环境变量对象
var sys_conf_obj = new sys_conf();

//属性
this.host = sys_conf_obj.dbhost;
this.user = sys_conf_obj.dbuser;
this.pwd = sys_conf_obj.dbpwd;
this.name = sys_conf_obj.dbname;
this.conn = "";
this.rs = "";

//方法
//建立数据库连接
this.connection = function(){
try {
this.conn = Server.CreateObject("ADODB.CONNECTION");
this.conn.open("PROVIDER=SQLOLEDB.1;Data Source=" + this.host + ";Initial Catalog=" + this.name + ";Persist Security Info=True;User ID=" + this.user + ";Password=" + this.pwd + ";Connect Timeout=30");
if(this.conn.state == 1) {
this.rs = Server.CreateObject("ADODB.RECORDSET");
this.rs.ActiveConnection = this.conn;
}
}
catch(e) {
this.conn.close();
this.conn = null;
Response.Write ("The database connection makes a mistake, please inspect connects the string.");
Response.End();
}
}

//建立记录集对象
this.create_rs = function(rs_obj) {
if(typeof(rs_obj) == "undefined") {
this.rs = Server.CreateObject("ADODB.RECORDSET");
this.rs.ActiveConnection = this.conn;
}else{
rs_obj = Server.CreateObject("ADODB.RECORDSET");
rs_obj.ActiveConnection = this.conn;
}
}

//关闭数据库连接
this.close_database = function() {
this.conn.close();
this.conn = null;
}

//返回值为数组对象
this.query = function(sql,max) {
var i,j,fieldslen,len,vdata,data=[],sp;
this.rs.open(sql),this.conn,1,1;
vdata = this.rs.GetRows().toArray();
// 获取数据表的字段数
fieldslen = this.rs.fields.count;
this.rs.close();
this.rs = null;
//开始转换数组
//得到记录数
len = vdata.length/fieldslen;
if(typeof(max) == "undefined") {
//遍历所有记录
//i:记录号 j:字段号
for(i=0;i<len;i++) {
data[i] = new Array();
//指针指向下一条记录的首字段
sp = i * fieldslen;
for(j=0;j<fieldslen;j++)
data[i][j] = vdata[sp+j];
}
}else{
//显示指定的记录数
for(i=0;i<max;i++) {
data[i] = new Array();
//指针指向下一条记录的首字段
sp = i * fieldslen;
for(j=0;j<fieldslen;j++)
data[i][j] = vdata[sp+j];
}
}
return data;
}
}

%>

注意,这里采用的是记录集的GetRows()方法来得到一个数组,然后使用JAVASCRIPT中的toArray()函数将它转换为一个JAVASCRIPT的数组。用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);

// 循环输出数据
for(var y=0;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中是没有直接转换二维数组的函数的,最后将它转换成我们需要的二维数组。当然如果你不习惯这种方法也可以使用常规的记录集的方法来逐一输出数据,这个主要是看个人的习惯了。

由于时间仓促,代码中可能还存在些BUG,比如数据库中无记录的判断。不过这个也很方便,请大家补上。还有如果数据库中的记录很多,那么数据输出就得采取分页的形式了。关于这个我想放在下一次来说。以上的代码只是抛砖引玉,希望能够给大家得到一些编程上的启发,如果能这样的话,我已经很高兴了。由于个人水平有限,如果有哪些地方写错了,还请大家多多指正,在此谢过了!

posted @ 2009-05-13 04:23  180CM青菜  阅读(629)  评论(0编辑  收藏  举报