当前位置: 首页 > 图文教程 > 网络编程 > ASP > CJJ专用ASP类库中的某个class

ASP
ASP基础讲座(下)
解决IIS5 HTTP500内部错误
ASP 3.0高级编程(四十六)
ASP 3.0高级编程(四十五)
ASP 3.0高级编程(四十四)
ASP 3.0高级编程(四十三)
ASP 3.0高级编程(四十二)
ASP 3.0高级编程(四十一)
ASP 3.0高级编程(三十九)
ASP 3.0高级编程(三十八)
ASP 3.0高级编程(三十七)
ASP 3.0高级编程(三十六)
ASP 3.0高级编程(三十五)
ASP 3.0高级编程(三十四)
ASP 3.0高级编程(三十三)
ASP 3.0高级编程(三十二)
ASP 3.0高级编程(三十一)
ASP错误代码说明
jscript错误代码及相应解释大全
ASP错误处理

CJJ专用ASP类库中的某个class


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 69 ::
收藏到网摘: n/a

作为程序员,相信每个人都有自己的函数库及类库。在做项目时,从库里面提取想要的函数及类。这样可以提高开发效率。CJJ专用ASP类库中的某个class
复制代码 代码如下:

'----******************** TConnString *****************************----
'数据库连接字符串结构体
Class TConnString
Public DBName,DBPath,DBServer,DBUser,DBPass,DBType
End Class
'----******************** TConnString *****************************----
'----********************* TDBOperate *****************************----
'通用数据库操作类
Class TDBOperate
Private cls_oConn,cls_oRS '类私有Connection对象、RecordSet对象
Private cls_sErrInfo,cls_sConn,cls_sSQL,cls_sURL,cls_sFormAction
Private cls_iPageSize '分页数
Private cls_lTotalPage,cls_lTotalRecord,cls_lPageNo
'类初始化
Private Sub Class_Initialize()
End Sub
'*****************************************
' 类型: 属性
' 目的: 根据获取的Connection String,创建数据库连接
' 输入: a_sConn:数据类型字符串
' 返回: 无
'*****************************************
Public Property Let SetConn(a_sConn)
Dim sObjType

sObjType = LCase(TypeName(a_sConn))
If sObjType <> "string" Then
cls_sErrInfo = cls_sErrInfo & "<li>SetConn:非法的字符串参数</li>" & Chr(10)
Exit Property
End If
Set cls_oConn = CreateObject("Adodb.Connection")
On Error Resume Next
cls_oConn.Open a_sConn
If Err Then
Err.Clear
Set cls_oConn = Nothing
On error goto 0
cls_sErrInfo = cls_sErrInfo & "<li>数据库连接出错</li>" & Chr(10)
End If
On Error Goto 0
End Property
'*****************************************
' 类型: 属性
' 目的: 根据获取的Connection对象,创建数据库连接
' 输入: a_oConn:数据类型字符串
' 返回: 无
'*****************************************
Public Property Set SetConn(a_oConn)
Dim sObjType,sConn
Dim oConnStr
sObjType = LCase(TypeName(a_oConn))
Select Case sObjType
Case "connection"
'设置Connection对象
Set cls_oConn = a_oConn
Case "tconnstring"
sConn = ""
Set oConnStr = a_oConn
Select Case (oConnStr.DBType)
Case gbl_iDB_Access
sConn = "Provider = micorsoft.jet.oledb.4.0; User ID = " & oConnStr.DBUser & "; Password = " & Replace(oConnStr.DBPass, Chr(0), "") & ";Initial Catalog = " & oConnStr.DBName & "; Data Source = " & SqlLocalName & ";"
Case gbl_iDB_MsSQL
sConn = "Provider = Sqloledb; User ID = " & oConnStr.DBUser & "; Password = " & Replace(oConnStr.DBPass, Chr(0), "") & ";Initial Catalog = " & oConnStr.DBName & "; Data Source = " & oConnStr.DBServer & ";"
End Select
If sConn = "" Then
cls_sErrInfo = cls_sErrInfo & "<li>数据库连接对象出错,无法创建Connection对象</li>" & Chr(10)
Exit Property
End If
'设置Connection连接串值,供ConnStr属性返回
cls_sConn = sConn
Set cls_oConn = CreateObject("Adodb.Connection")
On Error Resume Next
cls_oConn.Open sConn
If Err Then
Err.Clear
Set cls_oConn = Nothing
cls_sErrInfo = cls_sErrInfo & "<li>数据库连接出错</li>" & Chr(10)
End If
On Error Goto 0
Case Else
cls_sErrInfo = cls_sErrInfo & "<li>SetConn:非法的对象参数</li>" & Chr(10)
Exit Property
End Select
End Property
'*****************************************
' 类型: 属性
' 目的: 设置RecordSet对象
' 输入: a_sSQL: SQL语句。
' 返回: 无。
'*****************************************
Public Property Let SetRS(a_sSQL)
If LCase(TypeName(cls_oConn)) <> "connection" Then
cls_sErrInfo = cls_sErrInfo & "<li>非法的Connection对象,无法创建RecordSet对象</li>" & Chr(10)
Exit Property
End If
cls_sSQL = a_sSQL
'创建RecordSet对象
Set cls_oRS = CreateObject("Adodb.RecordSet")

' On Error Resume Next
cls_oRS.Open cls_sSQL,cls_oConn,1,1
' On Error Goto 0
End Property
'*****************************************
' 类型: 属性
' 目的: 设置RecordSet对象
' 输入: a_oRS: RecordSet对象
' 返回: 无。
'*****************************************
Public Property Set SetRS(a_oRS)
If LCase(TypeName(a_oRS))<>"recordset" Then
cls_sErrInfo = cls_sErrInfo & "<li>非法的RecordSet对象</li>" & Chr(10)
Exit Property
End If
'设置RecordSet对象
Set cls_oRS = a_oRS
End Property
'*****************************************
' 类型: 属性
' 目的: 设置RecordSet对象
' 输入: a_oRS: RecordSet对象
' 返回: 返回一RecordSet对象
'*****************************************
Public Property Get GetRS()
Set GetRS = cls_oRS
End Property
'获取Connection对象
Public Property Get GetConn()
If cls_sErrInfo <> "" Then
Call ShowError()
End If
If LCase(TypeName(cls_oConn))<>"connection" Then
cls_sErrInfo = cls_sErrInfo & "<li>Connection对象获取失败</li>"
' Exit Property
End If
Set GetConn = cls_oConn
End Property
'返回数据库连接字符串
Public Property Get ConnStr
ConnStr = cls_sConn
End Property
'设置第个页面显示的数据数
Public Property Let PageSize(a_iPageSize)
If Not IsNumeric(a_iPageSize) Then
cls_sErrInfo = cls_sErrInfo & "<li>无效的分页记录数参数</li>" & Chr(10)
Exit Property
End If
cls_iPageSize = a_iPageSize
End Property
'设置SQL语句,用于建立RecordSet对象
Public Property Let SQL(a_sSQL)
If IsNone(a_sSQL) Then
cls_sErrInfo = cls_sErrInfo & "<li>没有设置SQL,无法创建RecordSet对象</li>" & Chr(10)
Exit Property
End If
cls_sSQL = Trim(a_sSQL)
End Property
'执行数据操作
Public Sub Execute()
If cls_sErrInfo <> "" Then
ShowError("<ul>" & Chr(10) & cls_sErrInfo & "</ul>" & Chr(10))
Exit Sub
End If
If LCase(TypeName(cls_oConn))="connection" Then
If IsNumeric(cls_iPageSize) Then
Set cls_oRS = CreateObject("Adodb.RecordSet")
cls_oRS.Open cls_sSQL,cls_oConn,1,1
Else
End If
Else
cls_sErrInfo = cls_sErrInfo & "<li>非法的Connection对象</li>" & Chr(10)
End If
End Sub
'*****************************************
' 类型: 属性
' 目的: 设定或显示URL。
' 输入: a_sURL: 需要分页的文件地址。
' 返回: 无
'*****************************************
Public Property Let URL(ByVal a_sURL)
cls_sURL = a_sURL
End Property
'*****************************************
' 类型: 过程
' 目的: 统计总记录数、计算总页数
' 输入: 无
' 返回: 无
'*****************************************
Private Sub Pagination(ByVal a_sStr)
Dim iPosition,cls_sErrInfo,i,oRS_Temp,lTotalRecord
If cls_sErrInfo <> "" Then
Call ShowErrors()
Exit Sub
End If
If cls_oRS.Eof And cls_oRS.Bof Then
cls_sErrInfo = cls_sErrInfo & "<li>库中无任何记录</li>"
End If
'计算总计录数
Select Case LCase(TypeName(a_sStr))
Case "string"
Set oRS_Temp = cls_oConn.Execute(a_sStr)
lTotalRecord = CLng(oRS_Temp(0).Value)
Case "integer"
Select Case (Int(Trim(a_sStr)))
Case gbl_iPagination_UseRcdCount '使的RecordCount方法进行分页
lTotalRecord = cls_oRS.RecordCount
Case gbl_iPagination_UsePgCount '使用PageCount方法进行分页
lTotalRecord = cls_oRS.PageCount * cls_iPageSize
End Select
End Select
cls_lTotalRecord = lTotalRecord
If (cls_lTotalRecord<=2147483647 AND cls_lTotalRecord>=-2147483648) Then
cls_lTotalRecord = CLng(cls_lTotalRecord)
Else
cls_lTotalRecord = 2147483647
End If
If cls_lTotalRecord <0 Then
cls_lTotalRecord = 0
End If
'计算总页数
If cls_lTotalRecord Mod cls_iPageSize = 0 Then
cls_lTotalPage = CLng(cls_lTotalRecord \ cls_iPageSize * -1)*-1
Else
cls_lTotalPage = CLng(cls_lTotalRecord \ cls_iPageSize * -1)*-1 + 1
End If
'获取当前页参数
cls_lPageNo = Trim(Request.QueryString("Page"))
If cls_lPageNo = "" Then
cls_lPageNo = Trim(Request.Form("Page"))
If cls_lPageNo = "" Then
cls_lPageNo = 1
End If
End If
'如果没有选择第几页,则默认显示第一页
If cls_lPageNo <> "" And IsNumeric(cls_lPageNo) Then
If (cls_lPageNo <= 2147483647 And cls_lPageNo>=-2147483648) Then
cls_lPageNo = CLng(cls_lPageNo)
Else
cls_lPageNo = 2147483647
End If
If (cls_lPageNo<=0) Then
cls_lPageNo = 1
End If
Else '当前页参数为空或者非数字,默认将转到第1页
cls_lPageNo=1
End If
If (cls_lPageNo > cls_lTotalPage AND cls_lTotalPage<>0) Then
cls_lPageNo = cls_lTotalPage
End If
cls_oRS.PageSize = cls_iPageSize
cls_oRS.AbsolutePage = cls_lPageNo
iPosition = InstrRev(cls_sURL,"?")
cls_sFormAction = cls_sURL
If iPosition > 0 Then
cls_sURL = cls_sURL & "&Page="
Else
cls_sURL = cls_sURL & "?Page="
End If
End Sub
'*****************************************
' 类型: 过程
' 目的: 显示分页信息
' 输入: 无
' 返回: 无
'*****************************************
Public Sub Pages(ByVal a_sStr)
Dim strPages,k,intTemp,intTemp1
Dim sResult
If Not IsNone(cls_sErrInfo) Then
Call ShowErrors()
End If
'计算总页数及总记录数
Call Pagination(a_sStr)
If cls_lTotalPage = 1 Then Exit Sub
sResult = sResult & "<table class=""clsShowPage"">" & Chr(10)
sResult = sResult & " <tr>" & Chr(10) & " <td>" & Chr(10)
sResult = sResult & " <table width=""100%"">" & Chr(10)
sResult = sResult & " <tr>" & Chr(10) & " <td class=""PageText"">" & Chr(10)
If cls_lTotalPage >= 1 Then
If cls_lPageNo <= 1 Then
sResult = sResult & "首页 前页 <a href=""" & cls_sURL & cls_lPageNo+1 & """>后页</a> <a href=""" & cls_sURL & cls_lTotalPage & """>末页</a>" & Chr(10)
Else
If cls_lPageNo >= cls_lTotalPage Then
sResult = sResult & "<a href=""" & cls_sURL & "1"">首页</a> <a href=""" & cls_sURL & cls_lPageNo -1 & """>前页</a> " & "后页 末页" & Chr(10)
Else
sResult = sResult & "<a href=""" & cls_sURL & "1"">首页</a> <a href=""" & cls_sURL & cls_lPageNo -1 & """>前页</a> " & "<a href=""" & cls_sURL & cls_lPageNo+1 & """>后页</a> <a href=""" & cls_sURL & cls_lTotalPage & """>末页</a>" & Chr(10)
End If
End If
sResult = sResult & " 页次:<strong>" & cls_lPageNo & "</strong>/" & cls_lTotalPage & "页 共<strong>" & cls_lTotalRecord & "</strong>条记录 <strong>" & cls_iPageSize & "</strong>条/页</td>" & Chr(10)
sResult = sResult & " <form name=""gopage"" action=""" & cls_sFormAction & """ method=""post"">" & Chr(10)
sResult = sResult & " <td> 第"
sResult = sResult & " <input type=""text"" name=""pageno"" class=""InputPage"" title=""请输入页号,然后回车"">页 " & Chr(10)
sResult = sResult & "<input type=""submit"" class=""GotoPage"" value=""GO""></td></form></tr>" & Chr(10)
End If
sResult = sResult & " </table>" & Chr(10) & " </td>" & Chr(10) & " </tr>" & Chr(10) & "</table>" & Chr(10)
'输出分页信息
Response.Write("result:" & sResult)
End Sub
'类销毁
Private Sub Class_Terminate()
If LCase(TypeName(cls_oConn))<>"nothing" Then
cls_oConn.Close
Set cls_oConn = Nothing
End If
If LCase(TypeName(cls_oRS))<>"nothing" Then
' cls_oRS.Close
Set cls_oRS = Nothing
End If
End Sub

'*****************************************
' 类型: 过程
' 目的: 显示分页类中出现的错误信息
' 输入: 无
' 返回: 无
'*****************************************
Private Sub ShowErrors()
If cls_cls_sErrInfo <> "" Then
cls_cls_sErrInfo = "<ul>" & Chr(10) & cls_sErrInfo & "</ul>" & Chr(10)
Response.Write(cls_cls_sErrInfo)
Response.End
End If
End Sub
End Class
'----********************* TDBOperate *****************************----

稍提一个编码风格
个人觉得代码混排是个鸡肋,混排的可读性差,所以我一般都只是少量混排,尽量将代码和HTML分离。
复制代码 代码如下:

<!--#include file="pubdb.asp"-->
<%
'*****************************************
'类型:函数
'目的:报错
'参数:
'a_num:报错信息参数
'*****************************************
Private Function ShowError(a_Num)
Dim sErrInfo

sErrInfo = ""
Response.Write("<p>Error Number:era_" & a_Num & "</p>")
Select Case a_Num
Case "1000"
sErrInfo = "参数类型不正确,请检查"
Case "1100"
sErrInfo = "无法打开数据库连接"
Case Else
sErrInfo = "发现未知错误,请与管理员联系"
End Select
sErrInfo = "<p>Error Description:" & sErrInfo & "</p>"
Response.Write(sErrInfo)
Response.End
End Function

Dim oRS,sHtml

Call OpenDB()
Set oRS = oConn.OpenSchema(20)
sHtml=""
oRS.MoveFirst

'循环读取数据库中的表名
Do While Not oRS.EOF
If UCase(oRS(3))="TABLE" Then
sTemp = Trim(oRS(2))
If sTBName = sTemp Then
sHtml= sHtml & Space(2) & "<option value=""" & sTemp & """ selected=""selected"">" & sTemp & "</option>" & Chr(10)
Else
sHtml= sHtml & Space(2) & "<option value=""" & sTemp & """>" & sTemp & "</option>" & Chr(10)
End If
End If
oRS.MoveNext
Loop
Call CloseDB()
%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>数据库名</title>
<script type="text/javascript">
<!--
var sDstID="";
function serverResult(a_sUrl,a_sSrcID,a_sDstID) {
var sValue = document.getElementById(a_sSrcID).value;
sDstID=a_sDstID;
if ((sValue == null) || (sValue == "")) return;
var sUrl = a_sUrl+sValue;
oXml.open("GET", sUrl,true);
oXml.onreadystatechange = updateData;
oXml.send(null);
}

function updateData() {

var aElmnts = sDstID.split(',');
var oElmnt = null;
var aTags=null;
var oXmlData=null;

if ((oXml.readyState == 4) && (oXml.status == 200)) {
aTags = oXml.responseXML.documentElement.getElementsByTagName("cjjitem");
if (aTags.length!=aElmnts.length) {
alert('获取的服务器端的数据错误!');
return null;
}
for (var i=0;i<aElmnts.length ;i++ ) {
oElmnt = document.getElementById(aElmnts[i]);
oElmnt.innerHTML=aTags[i].firstChild.data;
}
}
return true;
}

var oXml = false;
if (window.ActiveXObject) {
oXml = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
oXml=new XMLHttpRequest();
}
//-->
</script>
</head>
<body>
<form method="POST" name="form1" action="addFormData.asp">
<p> </p>
<p>数据库名:<input type="text" name="txtDBName" size="7" value="work"> 数据库用户名:<input type="text" name="DBUserName" size="8" value="sa">数据库密码:<input type="password" name="DBUserPassWord" size="10" value=""> 数据库服务器路径:<input type="text" name="DBServerPath" size="20" value="127.0.0.1"></p>
<p>数据表名:<select size="1" id="sltTBName" name="sltTBName" onchange="serverResult('getFieldList.asp?n=','sltTBName','fieldcount,tblFields');">
<option selected="selected">请选择一个表</option>
<%=sHtml%>
</select></p>

<div id="fieldcount">表字段个数:<input type="text" id="txtFldCount" name="txtFldCount" value="0" /></div>
<table id="tblFields" border="1" width="91%">
<thead>
<tr>
<td align="center" width="94">字段名</td>
<td align="center" width="113">字段类型</td>
<td width="27" align="center">使用</td>
<td width="18" align="center">只读</td>
<td align="center" width="80">表单项类型</td>
<td align="center" width="100">表单项名称</td>
<td align="center" width="92">表单项描述</td>
<td align="center" width="87">表单项验证</td>
<td align="center">表单项默认值</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
<p align="left">需要生成的动态ASP网页类型:<select size="1" name="sltAspType">
<option value="0">数据添加</option>
<option value="1">数据编辑</option>
<option value="2">数据删除</option>
<option value="3">数据管理</option>
<option value="4">数据列表</option>
</select> 文件名:<input type="text" name="txtFileName" size="17" value="">
文件类型:<select size="1" name="sltFileType">
<option value="ASP">ASP</option>
<option value="PHP">PHP</option>
<option value="JSP">JSP</option>
<option value="PERL">PERL</option>
<option value="VB.NET">VB.NET</option>
<option value="C#">C#</option>
</select>
<input type="submit" value="生成文件" name="action"></p>
</form>
</body>
</html>