代码如下:
'----******************** 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 & "liSetConn:非法的字符串参数/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 & "liSetConn:非法的对象参数/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 & "liConnection对象获取失败/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_lTotalPage0) 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("pError Number:era_" & a_Num & "/p")
Select Case a_Num
Case "1000"
sErrInfo = "参数类型不正确,请检查"
Case "1100"
sErrInfo = "无法打开数据库连接"
Case Else
sErrInfo = "发现未知错误,请与管理员联系"
End Select
sErrInfo = "pError Description:" & sErrInfo & "/p"
Response.Write(sErrInfo)
Response.End
End Function
Dim oRS,sHtml
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/) 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;iaElmnts.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" width="91%"
thead
tr
td style="text-align:center" width="94"字段名/td
td style="text-align:center" width="113"字段类型/td
td width="27" style="text-align:center"使用/td
td width="18" style="text-align:center"只读/td
td style="text-align:center" width="80"表单项类型/td
td style="text-align:center" width="100"表单项名称/td
td style="text-align:center" width="92"表单项描述/td
td style="text-align:center" width="87"表单项验证/td
td style="text-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