📄 复件 database.asp
字号:
<!--#include file="../fcDom/DOM.asp"-->
<%
/*=========================================================================================
* Database类
=========================================================================================*/
//类构造函数(类定义)
function Database() {
//成员变量
this.dbconn; //数据库连接
//成员函数
this.close = close; //关闭数据库
this.BeginTrans = BeginTrans; //事务开始
this.CommitTrans = CommitTrans; //事务提交
this.RollbackTrans = RollbackTrans; //事务回滚
this.getPrimaryKey = getPrimaryKey; //获取指定表的主键值
this.saveNoUsedPrimaryKey = saveNoUsedPrimaryKey; //将生成了但未被使用的主键保存起来
this.clearNoUsedPrimaryKey = clearNoUsedPrimaryKey; //清除生成了但未被使用的主键
this.insertEntity = insertEntity; //往数据库中插入一条记录
this.deleteEntity = deleteEntity; //从数据库中删除数据,没有删除条件时不处理
this.updateEntity = updateEntity; //根据主健值更新一条记录
this.saveEntity = saveEntity; //保存Entity,数据库中已有相应记录时相当于执行updateEntity操作,没有相应记录时执行insertEntity
this.saveList = saveList; //逐一保存EntityList下的每一个Entity。保存数据时对每个Entity的操作方式与saveEntity的相同
this.expandEntityAll = expandEntityAll ; //查询一条记录,结果包含所有字段
this.queryEntityAll = queryEntityAll; //查询多条记录,结果包含所有字段
this.queryEntityAllWithPage = queryEntityAllWithPage; //翻页查询,结果包含所有字段
this.queryEntityAllReturnHiddenData = queryEntityAllReturnHiddenData; //查询多条记录,并返回为表单的隐藏域
this.runInsertSql = runInsertSql;
this.runUpdateSql = runUpdateSql;
this.runDeleteSql = runDeleteSql;
this.runQuerySql = runQuerySql;
this.runQuerySqlWithPage = runQuerySqlWithPage;
this.runQuerySqlReturnHiddenData = runQuerySqlReturnHiddenData; //查询多条记录,并返回为表单的隐藏域
//初始化操作,创建数据库连接
this.dbconn = Server.CreateObject("ADODB.Connection");
var strConn = "DBQ=" + Server.MapPath("../core/database/crm.mdb") + ";Driver={Microsoft Access Driver (*.mdb)};";
this.dbconn.Open(strConn);
}
//关闭数据库
function close() {
this.dbconn.close();
this.dbconn = null;
}
//开始事务
function BeginTrans() {
this.dbconn.BeginTrans();
}
//提交事务
function CommitTrans() {
this.dbconn.CommitTrans();
}
//回滚事务
function RollbackTrans() {
this.dbconn.RollbackTrans();
}
//获取指定表的主键值
function getPrimaryKey(tableName) {
try {
var primaryKey = "";
var recordSet = Server.CreateObject("ADODB.RecordSet");
primaryKey = getNoUsedRefNo(this.dbconn, recordSet, tableName); //先从TRX_REFNO_NOUSE表得到生成但未使用的主键序列
if(primaryKey=="-1") { //没找到
primaryKey = getRefNo(this.dbconn, recordSet, tableName); //从TRX_REFNO表得到主键序列
saveNoUsedRefNo(this.dbconn, recordSet, tableName, primaryKey, "U"); //将生成的主键保存起来
}
else {
clearNoUsedRefNo(this.dbconn, recordSet, tableName, primaryKey);
}
//在primaryKey前加上日期yyyyMMdd
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
month = month<10?("0"+month):(""+month);
day = day<10?("0"+day):(""+day);
primaryKey = "" + year + month + day + primaryKey;
return primaryKey;
}
catch(e) {
throw e;
}
finally {
}
}
//将生成了但未被使用的主键保存起来
function saveNoUsedPrimaryKey(tableName,primaryKey) {
try {
var recordSet = Server.CreateObject("ADODB.RecordSet");
var refNoLength = getRefNoLength(this.dbconn, recordSet, tableName);
var refNo = "";
if(refNoLength>0) refNo = primaryKey.substr(primaryKey.length-refNoLength, refNoLength);
saveNoUsedRefNo(this.dbconn, recordSet, tableName, refNo, "N");
}
catch(e) {
throw e;
}
finally {
}
}
//清除生成了但未被使用的主键
function clearNoUsedPrimaryKey(tableName,primaryKey) {
try {
var recordSet = Server.CreateObject("ADODB.RecordSet");
var refNoLength = getRefNoLength(this.dbconn, recordSet, tableName);
var refNo = "";
if(refNoLength>0) refNo = primaryKey.substr(primaryKey.length-refNoLength, refNoLength);
clearNoUsedRefNo(this.dbconn, recordSet, tableName, refNo);
}
catch(e) {
throw e;
}
finally {
}
}
//往数据库中插入一条记录,成功返回1,异常抛出
function insertEntity(node) {
if(node==null) throw "Error:Node is null!";
try {
var strSQL = "select * from " + node.name;
//Response.Write(strSQL);
var recordSet = Server.CreateObject("ADODB.RecordSet");
recordSet.Open(strSQL, this.dbconn, 1, 3);
/*
recordSet.AddNew();
var children = node.child;
for(var i=0; i<children.length; i++) {
recordSet(children[i].name) = children[i].value;
}
*/
insertEntityToCache(recordSet, node);
recordSet.Update();
recordSet.close();
return 1;
}
catch(e) {
throw e;
}
finally {
}
}
function insertEntityToCache(recordSet, node) {
recordSet.AddNew();
var children = node.child;
for(var i=0; i<children.length; i++) {
if(children[i].name.substr(children[i].name.length-1,1)!="#" && children[i].value!="")
recordSet(children[i].name) = children[i].value;
}
}
//从数据库中删除数据,没有删除条件时不处理
//例如:UserDetail/classid[@type='like']/String[@value='abc%'] 同于SQL: delete from UserDetail where classid like 'abc%'
function deleteEntity(node) {
if(node.child.length<1) return -1;
var strSQL = "";
strSQL = "delete from " + node.name + " where ";
for(var i=0; i<node.child.length; i++) {
strSQL += node.child[i].name + " " + node.child[i].value;
if(node.child[i].child[0].name=="String")
strSQL += " '" + node.child[i].child[0].value + "' and ";
else
strSQL += " " + node.child[i].child[0].value + " and ";
}
strSQL = strSQL.substr(0, strSQL.length-4);
//Response.Write(strSQL);
this.dbconn.Execute(strSQL);
}
//根据主健值更新一条记录,如果主键不存在或未找到对应记录则返回-1,主键字段名必须为C_MAIN_REF
function updateEntity(node) {
try {
var strSQL = "select * from " + node.name + " where C_MAIN_REF='";
//找到主键C_MAIN_REF的值
var isFindPK = false;
var tmpNode = node.findNodeByXPath("C_MAIN_REF");
if(tmpNode!=null) {
strSQL += tmpNode.value + "' ";
isFindPK = true;
}
/*
for(var i=0; i<node.child.length; i++) {
if(node.child[i].name.toUpperCase()=="C_MAIN_REF") {
strSQL += node.child[i].value + "' ";
isFindPK = true;
break;
}
}
*/
if(!isFindPK) return -1;
//Response.Write(strSQL);
var recordSet = Server.CreateObject("ADODB.RecordSet");
recordSet.Open(strSQL, this.dbconn, 1, 3);
if(!recordSet.EOF) {
var children = node.child;
for(var i=0; i<children.length; i++) {
if(children[i].name.substr(children[i].name.length-1,1)!="#" && children[i].value!="")
recordSet(children[i].name) = children[i].value;
}
recordSet.Update();
recordSet.close();
return 1;
}
else {
recordSet.close();
return -1;
}
}
catch(e) {
throw e;
}
finally {
}
}
//保存Entity,数据库中已有相应记录时相当于执行updateEntity操作,没有相应记录时执行insertEntity
function saveEntity(node) {
var returnVal = this.updateEntity(node);
if(returnVal==1) {
return 1;
}
else {
return this.insertEntity(node);
}
}
//逐一保存EntityList下的每一个Entity。保存数据时对每个Entity的操作方式与saveEntity的相同
function saveList(node) {
if(node==null) throw "Error:Node is null!";
try {
var strSQL = "select * from " + node.value;
//Response.Write(strSQL);
var recordSet = Server.CreateObject("ADODB.RecordSet");
recordSet.Open(strSQL, this.dbconn, 1, 3);
for(var i=0; i<node.child.length; i++) {
insertEntityToCache(recordSet, node.child[i]);
}
recordSet.UpdateBatch();
recordSet.close();
}
catch(e) {
throw e;
}
finally {
}
}
//查询一条记录,结果包含所有字段, 参数node: UserDetail/classid[String='0001']
//返回值: 1 从数据库查询到1条数据 0 没有查询到数据 -1 输入的参数个数不为1;查询到的记录数超过1条
function expandEntityAll(node) {
var strSQL = "select * from " + node.name + " where ";
var children = node.child;
for(var i=0; i<children.length; i++) {
if(children[i].name.substr(children[i].name.length-1,1)!="#" && children[i].value!="") {
if(children[i].type=="String")
strSQL += children[i].name + "='" + children[i].value + "' ";
else
strSQL += children[i].name + "='" + children[i].value + "' ";
}
}
//Response.Write(strSQL);
var rs = this.runQuerySql(strSQL);
if(rs.RecordCount<1) {
rs.close();
return 0;
}
else if(rs.RecordCount>1) {
rs.close();
return -1;
}
else {
var recordCount = rs.RecordCount;
var fieldsCount = rs.Fields.Count;
var hiddenData = "";
for(var j=0; j<fieldsCount; j++) {
var fieldName = rs.Fields(j).Name;
var fieldValue = rs(fieldName)+"";
var tmpNode = new Node(fieldName, "", fieldValue, 2);
var xPath = fieldName;
if(node.findNodeByXPath(xPath)==null)
node.addChildNode(tmpNode);
//Response.Write(tmpNode.value);
}
rs.close();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -