ASP中用javascript读取数据库的方法

ASP既可以用vbscript写,也可以用javascript来写。就目前我研究的情况,javascript相对vbscript唯有类的销毁函数无法支持,其它的都完全支持,包括无组件上传。而javascript好些有用的功能,比如prototype、不定个数参数等vbscript就无法支持。

对于javascript读取数据库的情况,完全可以仿照vbscript中的写法,只是在函数调用时加上括号即可。
简单一下:

var connection = new ActiveXObject("ADODB.Connection");//相当于Server.CreateObject,都是微软的东东
connection.cursorLocation = 3; //这个是为了在执行sql语句时用connect.Execute ,而不是繁琐的RecordSet
connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath('db.mdb'));
var rs = connection.Execute("Select * From [users]");

下面有一个完整经过封闭的javascript数据库类。


<%
//数据库类

function Database(){this.initalize.apply(this, arguments);}

Database.prototype = {

connection : null?? ?//连接
,record_set : null?? ?//记录集

//初始化
,initalize : function(filepath){
//全局只使用一个连接
if(!this.connection){
this.connection = Server.CreateObject("ADODB.Connection");
this.connect(filepath);
this.record_set = Server.CreateObject("ADODB.Recordset");
this.record_set.ActiveConnection = this.connection;
this.record_set.CursorType = 1;
}
return true;
}

//连接
,connect : function(filePath){
this.connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +filePath);
}

//执行
,execute : function(sql){
return this.connection.Execute(sql);
}
//查询
,query : function(sql){
try{this.record_set.Open(sql);}catch(e){die(sql)}
}

//获取记录行数
,count : function(){
return this.record_set.recordCount;
}

//获取二维数组
,get_rows : function(sql){
var i, rows = [], row = [], rs = this.record_set;
this.query(sql);
while(!rs.eof){
row = [];
for(i=0; i<rs.fields.count; i++){
row[rs.fields(i).name + ''] = rs.fields(i).value + '';
}
rows.push(row);
this.record_set.MoveNext();
}
this.record_set.Close();
return rows;
}

//获取一行数组
,get_row : function(sql){
var i, row = [];
this.query(sql);
if(!this.record_set.eof){
for(i=0; i<this.record_set.fields.count; i++){
//row.push = this.record_set(i) + '';
row[this.record_set.fields(i).Name + ''] = this.record_set.fields(i).Value + '';
}
}
this.record_set.Close();
return row;
}

//获取一个数据
,get_var : function(sql){
var r = null;
this.query(sql);
if(!this.record_set.eof){
r = this.record_set.fields(0).Value + '';
}
this.record_set.Close();
return r;
}

//向表插入数据
,insert : function (table, values){
var rs, id, i, fs = [], vs = [], fs_str = vs_str =? sql = '';
for(i in values){
fs.push('[' + i + ']');
vs.push("'" + values[i] + "'");
}
fs_str = fs.join(",");
vs_str = vs.join(",");
sql = "Insert Into [" +table+ "](" +fs_str+ ") Values(" +vs_str+ ")";
rs = Server.CreateObject("ADODB.Recordset");
rs.ActiveConnection = this.connection;
rs.CursorType = 1;
rs.LockType = 2;
rs.Open("Select * From ["+table+"] Where 0");
rs.AddNew();
for(i in values){
//这里是判断字段类型,不是很准确
if(rs.fields(i).Type == 3){
rs(i) = int(values[i]);
}else{
rs(i) = values[i];
}
}
rs.Update();
id = rs(0) + '';
rs.Close();
return id;
}

//删除数据
,del : function(table, wheres){
var sql;
sql = "Delete From [" +table+ "] Where " + wheres.join(" And ");
return this.execute(sql);
}

//向表插入数据
,update : function (table, values, wheres){
var rs, i, set_str=[], sql = '';
for(i in values){
set_str.push('[' + i + ']' + "='" + values[i] + "'");
}
set_str = set_str.join(", ");
sql = "Update [" +table+ "] Set " +set_str+ " Where " + wheres.join(" And ");
this.execute(sql);
return true;
}
}

%>

5 Replies to “ASP中用javascript读取数据库的方法

  1. 相当不错。以前在写ASP的时候,无论是网上还是书上都只有VBScript的版本。这几日一直在找寻完全使用Javascript作为服务器端的开发语言的方法。这段代码解决了困扰我很久的问题,谢谢了!

发表评论

电子邮件地址不会被公开。

*