使用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中是没有直接转换二维数组的函数,最后将它转换成我们需要的二维数组。当然如果你不习惯这种方法也可以使用常规的记录集的方法来逐一输出数据,这个主要是看个人的习惯了。
现在的问题是,如果数据库中的记录很多,象这样逐一输出数据肯定不可行,那么就得采取分页的形式了。关于这个我想放在下一次来说。以上的代码只是抛砖引玉,希望能够给大家得到一些编程上的启发,如果能这样的话,我已经很高兴了。由于个人水平有限,如果有哪些地方写得不妥,还请大家多多指正,在此谢过了!
猜你喜欢
- 前段时间在开发雨哲树网程序的时候,遇到需要转换地址中的参数,需要用到简单可逆运算的加密功能。在网上找了很多都不理想。因为我需要的这个可逆运算
- 很简单的一个函数,就是根据当前的日期生成一个随机数。<% Function getRnd() '**********
- 运行下面的代码你就可以清楚的认识到这两个参数的用法,innerText只能动态的改变指定元素内的文本内容,而innerHTML则不仅仅可以改
- 最近网上再度兴起了CSS布局和Table 布局的争论。我最初颇有些不以为然:我原以为CSS 布局的意义早已深入人心,却没想到还有这么多设计师
- 1. TVP, 表变量,临时表,CTE 的区别 TVP和临时表都是可以索引的,总是存在tempdb中,会增加系统数据库开销,而表变量和CTE
- 网上大部分的免费asp程序使用的是access数据库。但是access数据库作为一个中小型的单机数据库系统,在承担访问量、数据量大的网站应用
- 作为 Web 设计者,我们希望实现鹤立鸡群的设计,要做到这一点,要开阔眼界。欧美同东方的 Web 设计很不同,因为属于不同的文化。韩国不仅为
- 1,FCKeditor 编辑器最新版本: 2.3.1站点:http://www.fckeditor.net 演示:http://w
- “博客就像一本书”这话其实几个月前深圳FB时就有扯到,这也不是什么新概念,也许本身就应该是这样。打个比方,当你拿到一本未看过的书时,理论上你
- Cookie简介首先,我们对Cookie做一个简单的介绍,说明如何利用ASP来维护cookie。Cookie是存储在客户端计算机中的一个小文
- 查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效
- 使用fso对象遍历指定文件夹函数:'遍历文件夹sub ListFolderContents(path) &nbs
- 作用: 构建一些简单的SQL语句,结合在提交表单时使用,可以较方便<%@LANGUAGE="VBSCRIPT&
- 一个写给别人的小代码顺便也贴上来这是一个滑动展示用的小容器通过鼠标移动和离开触发滑动效果<!DOCTYPE html PUBLIC &
- 许多人利用Session变量来开发ASP(Active Server Pages)。这些变量与任何编程语言中通用的变量非常相似,并且具有和通
- 这篇是Nicholas讨论如果防止脚本失控的第二篇,主要讨论了如何重构嵌套循环、递归,以及那些在函数内部同时执行很多子操作的函数。基本的思想
- 在这篇文章(不敢妄称教程,最多称之为学习笔记)里,我会从头开始实现客户端模板的效果。不过你不要期望能够在这里找到可以直接拿去使用直接复用灵活
- 为了庆祝自己的博客重新开放,我在这里放一个自己刚刚写的jquery日期插件, 也许人们会说:日期选取插件已
- 1,SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了。在数据库工具下直接采用SQL
- 见下,把数字转成条形图、条形码的一个程序:<%Sub ShowChart(ByRef aValues,