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();
接口说明:
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();