ASP(JScript)数据库访问类1.01

 

ContractedBlock.gif ExpandedBlockStart.gif Code
接口说明:
getDBAccessTime:获取数据库访问次数
beginTrans:开始一个事务
commitTrans:提交一个事务
executeProc:执行存储过程
executeSQL:执行SQL语句
clearParas:清除命令参数
appendParam:添加命令参数
appendParaCopy:复制一份命令参数
close:关闭数据库连接
rsToObj:把读取出的数据集转换为对象数组

类代码(含注释):
// 数据库操作对象,适应Access和SQL Server数据库
//
 SQL Server构造方式示例: var DataProvider = new _DataProvider("127.0.0.1", "sa", "123456", "Test");
//
 Access构造方式示例: var DataProvider = new _DataProvider(Server.MapPath("DataBase/Test.mdb"));
function _DataProvider() {
    
// Connection对象
    var _conn = null;
    
// Command对象
    var _cmd = Server.CreateObject("ADODB.Command");
    
// 记录构造函数参数
    var _connParams = arguments;
    
// 数据库访问次数
    var _dbAccessTime = 0;
    
    
if (!(1 == _connParams.length || 4 == _connParams.length)) {
        
throw new Error("非法的数据库连接参数" + _connParams.toString());
    }
    
    
//    函数作用:
    //        连接数据库
    //    参数说明:
    //        (无)
    //    返回值:
    //        (无)
    var _connect = function() {
        
if (null == _conn){
            _conn 
= Server.CreateObject("ADODB.Connection");
            
            
if (4 == _connParams.length) {
                
// 连接SQL数据库连接串
                _conn.ConnectionString = "driver={SQL Server};server=" + _connParams[0+ ";uid=" + _connParams[1+ ";pwd=" + _connParams[2+ ";database=" + _connParams[3];
            } 
else if (1 == _connParams.length) {
                
// Access数据库连接串
                _conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _connParams[0];
            }
            
            
try{
                _conn.open();
            }
            
catch (e) {
                
throw new Error("错误的数据库连接字符串" + _conn.ConnectionString);
            }
        }
    };
    
    
//    函数作用:
    //        获取数据库访问次数
    //    参数说明:
    //        (无)
    // 返回值:
    //        (无)
    this.getDBAccessTime = function() {
        
return _dbAccessTime;
    };
    
    
//    函数作用:
    //        开始事务
    //    参数说明:
    //        (无)
    //    返回值:
    //        (无)
    this.beginTrans = function() {
        _connect();
        _conn.BeginTrans();
    };

    
//    函数作用:
    //        提交事务
    //    参数说明:
    //        (无)
    //    返回值:
    //        (无)
    this.commitTrans = function() {
        _conn.CommitTrans();
    };
    
    
//    函数作用:
    //        执行存储过程
    //    参数说明:
    //        procName-存储过程名
    //    返回值:
    //        (无)
    this.executeProc = function(procName){
        _connect();
        
if (!_cmd.ActiveConnection) {
            _cmd.ActiveConnection 
= _conn;
        }
        _cmd.CommandType 
= 4;
        _cmd.CommandText 
= procName;
        _cmd.Prepared 
= true;
        _dbAccessTime
++;
        
try {
            
return _cmd.Execute();
        } 
catch (e) {
            
throw new Error("执行存储过程 [" + procName + "] 出错");
        }
    };
    
    
// 函数作用:
    //   执行SQL语句
    // 参数说明:
    //   sqlStr-SQL语句字符串
    //   isPrepared-是否预编译SQL命令
    // 返回值:
    //   执行存储过程后得到的记录集
    this.executeSQL = function(sqlStr, isPrepared) {
        _connect();
        
if (!_cmd.ActiveConnection) {
            _cmd.ActiveConnection 
= _conn;
        }
        _cmd.CommandType 
= 1;
        _cmd.CommandText 
= sqlStr;
        _cmd.Prepared 
= isPrepared || false;
        _dbAccessTime
++;
        
try {
            
return _cmd.Execute();
        } 
catch (e) {
            
throw new Error("执行SQL语句 [" + sqlStr + "] 出错");
        }
     };
    
    
//    函数作用:
    //        清理Command对象的参数
    //    参数说明:
    //        (无)
    //    返回值:
    //        (无)
    this.clearParas = function()
    {
        
// 删除第0个参数后,第0个参数的指针会指向下一个参数,因此只需不断删除第0个参数直到参数个数为0
        while (0 < _cmd.Parameters.Count) {
            _cmd.Parameters.Delete(
0);
        }
    };
    
    
//    函数作用:
    //        添加Command对象参数
    //    参数说明:
    //        paramName-参数名
    //        paramType-参数类型
    //        paramValue-参数值
    //        paramSize-参数值长度
    //        paramDirection-参数方向,默认为传入
    //    返回值:
    //        (无)
    this.appendParam = function(paramName, paramType, paramValue, paramSize, paramDirection){
        
if (null == paramDirection) {
            paramDirection 
= DbType.Input;
        }
        _cmd.Parameters.Append(
            _cmd.CreateParameter(
                
"@" + paramName,
                paramType, 
                paramDirection,
                paramSize, 
                paramValue
            )
        );
    };
    
    
//    函数作用:
    //        复制一份Command对象参数
    //    参数说明:
    //        (无)
    //    返回值:
    //        (无)    
    this.appendParaCopy = function() {;
        
//循环复制每个参数
        for (var p = 0, len = _cmd.Parameters.Count; p < len; p++) {
            _cmd.Parameters.Append(
                _cmd.CreateParameter(
                    _cmd.Parameters(p).Name,
                    _cmd.Parameters(p).Type,
                    _cmd.Parameters(p).Direction,
                    _cmd.Parameters(p).Size,
                    _cmd.Parameters(p).Value
                )
            );
        }
    };
    
    
//    函数作用:
    //        关闭数据库相关操作对象
    //    参数说明:
    //        (无)
    //    返回值:
    //        (无)    
    this.close = function() {
        
if (null != _conn) {
            
if (0 != _conn.state) {
                _conn.close();
            }
            _conn 
= null;
        };
        
if (null != _cmd) {
            _cmd 
= null;
        };
    };

    
//    函数作用:
    //        把当前记录转换成对象(数组)
    //    参数说明:
    //        recordSet:记录集
    //    返回值:
    //        对象(数组)
    this.rsToObj = function(recordSet) {
        
// 存放对象的数组
        var newItems = [];
        
// 循环转换每行数据
        while (!recordSet.EOF)
        {
            
// 建立新对象
            var newItem = {};
            
// 循环设置对象属性
            for (var i = 0, len = recordSet.Fields.Count; i < len; i++) {
                
if ("number" == typeof(recordSet(i).Value)) {
                    newItem[recordSet(i).Name] 
= recordSet(i).Value;
                }
                
else {
                    newItem[recordSet(i).Name] 
= String(recordSet(i).Value);
                }
            }
            
// 放入数组
            newItems.push(newItem);
            
// 移动到下一条数据
            recordSet.MoveNext();
        }
        
// 关闭记录集
        recordSet.Close();
        
if (0 == newItems.length) {
            
// 如果没有对象,则返回null
            return null;
        }
        
else {
            
// 返回对象数组
            return newItems;
        }
    };
}


//    常用的ADO常量
var DbType = {
    Input: 
1,
    Output: 
2,
    
    Int: 
3,
    BigInt: 
20,
    SmallInt: 
2,
    TinyInt: 
16,
    
    Decimal: 
14,
    Double: 
5,
        
    Char: 
129,
    NChar: 
130,
    VarChar: 
200,
    Text: 
201,
    NVarChar: 
202,
    NText: 
203,
    DateTime: 
135
};

使用方法示例(Access):
var DataProvider = new _DataProvider(Server.MapPath("DataBase/Test.mdb"));
DataProvider.appendParam(
"title", DbType.NVarChar, "Test Article"50);
DataProvider.appendParam(
"content", DbType.NText, "Test Article Content"500);
DataProvider.executeSQL(
"INSERT INTO Article(title,content) VALUES(?,?)");
DataProvider.close();

转载于:https://www.cnblogs.com/voswin/articles/1282505.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值