作为程序员,相信每个人都有自己的函数库及类库。在做项目时,从库里面提取想要的函数及类。这样可以提高开发效率。CJJ专用ASP类库中的某个class
复制代码 代码如下:
'----********************TConnString*****************************----
'数据库连接字符串结构体
ClassTConnString
PublicDBName,DBPath,DBServer,DBUser,DBPass,DBType
EndClass
'----********************TConnString*****************************----
'----*********************TDBOperate*****************************----
'通用数据库操作类
ClassTDBOperate
Privatecls_oConn,cls_oRS'类私有Connection对象、RecordSet对象
Privatecls_sErrInfo,cls_sConn,cls_sSQL,cls_sURL,cls_sFormAction
Privatecls_iPageSize'分页数
Privatecls_lTotalPage,cls_lTotalRecord,cls_lPageNo
'类初始化
PrivateSubClass_Initialize()
EndSub
'*****************************************
'类型:属性
'目的:根据获取的ConnectionString,创建数据库连接
'输入:a_sConn:数据类型字符串
'返回:无
'*****************************************
PublicPropertyLetSetConn(a_sConn)
DimsObjType
sObjType=LCase(TypeName(a_sConn))
IfsObjType<>"string"Then
cls_sErrInfo=cls_sErrInfo&"<li>SetConn:非法的字符串参数</li>"&Chr(10)
ExitProperty
EndIf
Setcls_oConn=CreateObject("Adodb.Connection")
OnErrorResumeNext
cls_oConn.Opena_sConn
IfErrThen
Err.Clear
Setcls_oConn=Nothing
Onerrorgoto0
cls_sErrInfo=cls_sErrInfo&"<li>数据库连接出错</li>"&Chr(10)
EndIf
OnErrorGoto0
EndProperty
'*****************************************
'类型:属性
'目的:根据获取的Connection对象,创建数据库连接
'输入:a_oConn:数据类型字符串
'返回:无
'*****************************************
PublicPropertySetSetConn(a_oConn)
DimsObjType,sConn
DimoConnStr
sObjType=LCase(TypeName(a_oConn))
SelectCasesObjType
Case"connection"
'设置Connection对象
Setcls_oConn=a_oConn
Case"tconnstring"
sConn=""
SetoConnStr=a_oConn
SelectCase(oConnStr.DBType)
Casegbl_iDB_Access
sConn="Provider=micorsoft.jet.oledb.4.0;UserID="&oConnStr.DBUser&";Password="&Replace(oConnStr.DBPass,Chr(0),"")&";InitialCatalog="&oConnStr.DBName&";DataSource="&SqlLocalName&";"
Casegbl_iDB_MsSQL
sConn="Provider=Sqloledb;UserID="&oConnStr.DBUser&";Password="&Replace(oConnStr.DBPass,Chr(0),"")&";InitialCatalog="&oConnStr.DBName&";DataSource="&oConnStr.DBServer&";"
EndSelect
IfsConn=""Then
cls_sErrInfo=cls_sErrInfo&"<li>数据库连接对象出错,无法创建Connection对象</li>"&Chr(10)
ExitProperty
EndIf
'设置Connection连接串值,供ConnStr属性返回
cls_sConn=sConn
Setcls_oConn=CreateObject("Adodb.Connection")
OnErrorResumeNext
cls_oConn.OpensConn
IfErrThen
Err.Clear
Setcls_oConn=Nothing
cls_sErrInfo=cls_sErrInfo&"<li>数据库连接出错</li>"&Chr(10)
EndIf
OnErrorGoto0
CaseElse
cls_sErrInfo=cls_sErrInfo&"<li>SetConn:非法的对象参数</li>"&Chr(10)
ExitProperty
EndSelect
EndProperty
'*****************************************
'类型:属性
'目的:设置RecordSet对象
'输入:a_sSQL:SQL语句。
'返回:无。
'*****************************************
PublicPropertyLetSetRS(a_sSQL)
IfLCase(TypeName(cls_oConn))<>"connection"Then
cls_sErrInfo=cls_sErrInfo&"<li>非法的Connection对象,无法创建RecordSet对象</li>"&Chr(10)
ExitProperty
EndIf
cls_sSQL=a_sSQL
'创建RecordSet对象
Setcls_oRS=CreateObject("Adodb.RecordSet")
'OnErrorResumeNext
cls_oRS.Opencls_sSQL,cls_oConn,1,1
'OnErrorGoto0
EndProperty
'*****************************************
'类型:属性
'目的:设置RecordSet对象
'输入:a_oRS:RecordSet对象
'返回:无。
'*****************************************
PublicPropertySetSetRS(a_oRS)
IfLCase(TypeName(a_oRS))<>"recordset"Then
cls_sErrInfo=cls_sErrInfo&"<li>非法的RecordSet对象</li>"&Chr(10)
ExitProperty
EndIf
'设置RecordSet对象
Setcls_oRS=a_oRS
EndProperty
'*****************************************
'类型:属性
'目的:设置RecordSet对象
'输入:a_oRS:RecordSet对象
'返回:返回一RecordSet对象
'*****************************************
PublicPropertyGetGetRS()
SetGetRS=cls_oRS
EndProperty
'获取Connection对象
PublicPropertyGetGetConn()
Ifcls_sErrInfo<>""Then
CallShowError()
EndIf
IfLCase(TypeName(cls_oConn))<>"connection"Then
cls_sErrInfo=cls_sErrInfo&"<li>Connection对象获取失败</li>"
'ExitProperty
EndIf
SetGetConn=cls_oConn
EndProperty
'返回数据库连接字符串
PublicPropertyGetConnStr
ConnStr=cls_sConn
EndProperty
'设置第个页面显示的数据数
PublicPropertyLetPageSize(a_iPageSize)
IfNotIsNumeric(a_iPageSize)Then
cls_sErrInfo=cls_sErrInfo&"<li>无效的分页记录数参数</li>"&Chr(10)
ExitProperty
EndIf
cls_iPageSize=a_iPageSize
EndProperty
'设置SQL语句,用于建立RecordSet对象
PublicPropertyLetSQL(a_sSQL)
IfIsNone(a_sSQL)Then
cls_sErrInfo=cls_sErrInfo&"<li>没有设置SQL,无法创建RecordSet对象</li>"&Chr(10)
ExitProperty
EndIf
cls_sSQL=Trim(a_sSQL)
EndProperty
'执行数据操作
PublicSubExecute()
Ifcls_sErrInfo<>""Then
ShowError("<ul>"&Chr(10)&cls_sErrInfo&"</ul>"&Chr(10))
ExitSub
EndIf
IfLCase(TypeName(cls_oConn))="connection"Then
IfIsNumeric(cls_iPageSize)Then
Setcls_oRS=CreateObject("Adodb.RecordSet")
cls_oRS.Opencls_sSQL,cls_oConn,1,1
Else
EndIf
Else
cls_sErrInfo=cls_sErrInfo&"<li>非法的Connection对象</li>"&Chr(10)
EndIf
EndSub
'*****************************************
'类型:属性
'目的:设定或显示URL。
'输入:a_sURL:需要分页的文件地址。
'返回:无
'*****************************************
PublicPropertyLetURL(ByVala_sURL)
cls_sURL=a_sURL
EndProperty
'*****************************************
'类型:过程
'目的:统计总记录数、计算总页数
'输入:无
'返回:无
'*****************************************
PrivateSubPagination(ByVala_sStr)
DimiPosition,cls_sErrInfo,i,oRS_Temp,lTotalRecord
Ifcls_sErrInfo<>""Then
CallShowErrors()
ExitSub
EndIf
Ifcls_oRS.EofAndcls_oRS.BofThen
cls_sErrInfo=cls_sErrInfo&"<li>库中无任何记录</li>"
EndIf
'计算总计录数
SelectCaseLCase(TypeName(a_sStr))
Case"string"
SetoRS_Temp=cls_oConn.Execute(a_sStr)
lTotalRecord=CLng(oRS_Temp(0).Value)
Case"integer"
SelectCase(Int(Trim(a_sStr)))
Casegbl_iPagination_UseRcdCount'使的RecordCount方法进行分页
lTotalRecord=cls_oRS.RecordCount
Casegbl_iPagination_UsePgCount'使用PageCount方法进行分页
lTotalRecord=cls_oRS.PageCount*cls_iPageSize
EndSelect
EndSelect
cls_lTotalRecord=lTotalRecord
If(cls_lTotalRecord<=2147483647ANDcls_lTotalRecord>=-2147483648)Then
cls_lTotalRecord=CLng(cls_lTotalRecord)
Else
cls_lTotalRecord=2147483647
EndIf
Ifcls_lTotalRecord<0Then
cls_lTotalRecord=0
EndIf
'计算总页数
Ifcls_lTotalRecordModcls_iPageSize=0Then
cls_lTotalPage=CLng(cls_lTotalRecordcls_iPageSize*-1)*-1
Else
cls_lTotalPage=CLng(cls_lTotalRecordcls_iPageSize*-1)*-1+1
EndIf
'获取当前页参数
cls_lPageNo=Trim(Request.QueryString("Page"))
Ifcls_lPageNo=""Then
cls_lPageNo=Trim(Request.Form("Page"))
Ifcls_lPageNo=""Then
cls_lPageNo=1
EndIf
EndIf
'如果没有选择第几页,则默认显示第一页
Ifcls_lPageNo<>""AndIsNumeric(cls_lPageNo)Then
If(cls_lPageNo<=2147483647Andcls_lPageNo>=-2147483648)Then
cls_lPageNo=CLng(cls_lPageNo)
Else
cls_lPageNo=2147483647
EndIf
If(cls_lPageNo<=0)Then
cls_lPageNo=1
EndIf
Else'当前页参数为空或者非数字,默认将转到第1页
cls_lPageNo=1
EndIf
If(cls_lPageNo>cls_lTotalPageANDcls_lTotalPage<>0)Then
cls_lPageNo=cls_lTotalPage
EndIf
cls_oRS.PageSize=cls_iPageSize
cls_oRS.AbsolutePage=cls_lPageNo
iPosition=InstrRev(cls_sURL,"?")
cls_sFormAction=cls_sURL
IfiPosition>0Then
cls_sURL=cls_sURL&"&Page="
Else
cls_sURL=cls_sURL&"?Page="
EndIf
EndSub
'*****************************************
'类型:过程
'目的:显示分页信息
'输入:无
'返回:无
'*****************************************
PublicSubPages(ByVala_sStr)
DimstrPages,k,intTemp,intTemp1
DimsResult
IfNotIsNone(cls_sErrInfo)Then
CallShowErrors()
EndIf
'计算总页数及总记录数
CallPagination(a_sStr)
Ifcls_lTotalPage=1ThenExitSub
sResult=sResult&"<tableclass=""clsShowPage"">"&Chr(10)
sResult=sResult&"<tr>"&Chr(10)&"<td>"&Chr(10)
sResult=sResult&"<tablewidth=""100%"">"&Chr(10)
sResult=sResult&"<tr>"&Chr(10)&"<tdclass=""PageText"">"&Chr(10)
Ifcls_lTotalPage>=1Then
Ifcls_lPageNo<=1Then
sResult=sResult&"首页前页<ahref="""&cls_sURL&cls_lPageNo+1&""">后页</a><ahref="""&cls_sURL&cls_lTotalPage&""">末页</a>"&Chr(10)
Else
Ifcls_lPageNo>=cls_lTotalPageThen
sResult=sResult&"<ahref="""&cls_sURL&"1"">首页</a><ahref="""&cls_sURL&cls_lPageNo-1&""">前页</a>"&"后页末页"&Chr(10)
Else
sResult=sResult&"<ahref="""&cls_sURL&"1"">首页</a><ahref="""&cls_sURL&cls_lPageNo-1&""">前页</a>"&"<ahref="""&cls_sURL&cls_lPageNo+1&""">后页</a><ahref="""&cls_sURL&cls_lTotalPage&""">末页</a>"&Chr(10)
EndIf
EndIf
sResult=sResult&"页次:<strong>"&cls_lPageNo&"</strong>/"&cls_lTotalPage&"页共<strong>"&cls_lTotalRecord&"</strong>条记录<strong>"&cls_iPageSize&"</strong>条/页</td>"&Chr(10)
sResult=sResult&"<formname=""gopage""action="""&cls_sFormAction&"""method=""post"">"&Chr(10)
sResult=sResult&"<td>第"
sResult=sResult&"<inputtype=""text""name=""pageno""class=""InputPage""title=""请输入页号,然后回车"">页"&Chr(10)
sResult=sResult&"<inputtype=""submit""class=""GotoPage""value=""GO""></td></form></tr>"&Chr(10)
EndIf
sResult=sResult&"</table>"&Chr(10)&"</td>"&Chr(10)&"</tr>"&Chr(10)&"</table>"&Chr(10)
'输出分页信息
Response.Write("result:"&sResult)
EndSub
'类销毁
PrivateSubClass_Terminate()
IfLCase(TypeName(cls_oConn))<>"nothing"Then
cls_oConn.Close
Setcls_oConn=Nothing
EndIf
IfLCase(TypeName(cls_oRS))<>"nothing"Then
'cls_oRS.Close
Setcls_oRS=Nothing
EndIf
EndSub
'*****************************************
'类型:过程
'目的:显示分页类中出现的错误信息
'输入:无
'返回:无
'*****************************************
PrivateSubShowErrors()
Ifcls_cls_sErrInfo<>""Then
cls_cls_sErrInfo="<ul>"&Chr(10)&cls_sErrInfo&"</ul>"&Chr(10)
Response.Write(cls_cls_sErrInfo)
Response.End
EndIf
EndSub
EndClass
'----*********************TDBOperate*****************************----
稍提一个编码风格
个人觉得代码混排是个鸡肋,混排的可读性差,所以我一般都只是少量混排,尽量将代码和HTML分离。
复制代码 代码如下:
<>
<%
'*****************************************
'类型:函数
'目的:报错
'参数:
'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>