非常不錯的ASP操作數據庫類,支持多數據庫MSSQL,ACCESS,ORACLE,MYSQL等


可同時操作多個不同類型的數據庫。 
完全不用考慮數據類型的差別,再也不用想字符型字段加不加單引號。 
調用非常簡單,對數據庫的主要操作一般只需要一行代碼。 
支持mssql事務回滾。 
可自動生成和輸出sql語句方便調試。 
使用方法: 

1. 修改clsDbctrl.asp文件中的第1行為你自己的數據庫位置(修改方法參考下面的CreatConn函數說明)。如需連接多個數據庫可自行添加,格式相同。 

2. 在你新建的asp文件中包含此asp文件。如: 
<!--#include file="Inc/clsDbctrl.asp" --> 或者: 
<!--#include virtual="/Inc/clsDbctrl.asp"--> 

3.使用如下代碼應用此類: 
一個數據庫連接: 

<% 
OpenConn() '打開數據庫連接 
Dim db : Set db = New DbCtrl '建立對像 
'Your Code Here...... 
Co(db) : CloseConn() '釋放對象,關閉數據庫連接 
%> 

或者(一個或者多個數據庫連接): 

<% 
Dim db1 : Set db1 = New DbCtrl : db1.dbConn = Oc(a) 
Dim db2 : Set db2 = New DbCtrl : db2.dbConn = Oc(b) 
'Your Code Here...... 
Co(db1) : Co(db2) 
%> 

4.具體操作的例子可以參考各函數說明內的代碼示例。 

方法和屬性概覽(詳細用法及例子在下面): 

引用: 
CreatConn 生成數據庫連接字符串 
Oc 建立數據庫連接 
Co 釋放對像 
OpenConn 打開默認數據庫連接 
CloseConn 關閉默認數據庫連接 
dbCtrl.dbConn 屬性,獲取要操作的數據庫連接,默認值為Conn 
dbCtrl.dbErr 屬性,只讀,輸出捕獲的錯誤信息 
dbCtrl.Version 屬性,只讀,程序版本信息 
dbCtrl.AutoId 方法,自動獲取唯一序列號 
dbCtrl.GetRecord 方法,取得符合條件的紀錄集 
dbCtrl.GetRecordBySql 方法,根據sql語句取得紀錄集 
dbCtrl.GetRecordDetail 方法,根據某一條指定紀錄的詳細數據 
dbCtrl.AddRecord 方法,添加一個新的紀錄 
dbCtrl.UpdateRecord 方法,根據指定條件更新紀錄 
dbCtrl.DeleteRecord 方法,刪除符合條件的紀錄 
dbCtrl.ReadTable 方法,根據指定條件獲取某條紀錄中的其他字段的內容 
dbCtrl.C 方法,關閉紀錄集對像 
dbCtrl.wGetRecord, 
dbCtrl.wAddRecord, 
dbCtrl.wUpdateRecord, 
dbCtrl.wDeleteRecord 這4個方法是取得相應的操作(前面加w)的sql語句 


參數約定: 

由於ASP沒有Arguments對象,不能使用動態參數,所以,在本類的代碼中,使用了Array(數組)來達到這一效果。本類中的部分參數可以使用數組(參數說明中有注明),但使用數組時應參照以下格式: 

Array("Field1:Value1", "Field2:True", "Field3:100") 

對,有點像json的格式,如果涉及到變量,那就這樣: 

Array("Field1:" & Value1, "Field2:" & Value2, "Field3:" & Value3) 

可以這樣說,本類中的幾乎所有與數據庫字段相關的內容都可以用以上的數組格式來設置條件或者是獲取內容。而這裡最大的特點就是在使用時不用去考慮字段的類型,在字段后跟一個冒號,接着跟上相應的值就行了。如果你經常手寫ASP程序的話,你很快就會感受到運用這種方式的魅力,除了數據類型不用考慮之外,它也很方便隨時添加和刪除條件。如果你還不明白怎麽用的話沒關係,下面有很多例子可以說明這個問題。 

要把ASP的數據庫操作封裝起來其實並不難,相信大家以前自己也做過類似的代碼或是借用過其他人的封裝好的代碼。但是就如各位知道的一樣,使用封裝后的代碼一旦出錯,排錯是一個比較麻煩的事情,一般說來,封裝后操作越簡單的排錯也越複雜。俺在寫這些代碼的時候已經盡我所能考慮到如果出錯的話如何去排查錯誤,在盡可能簡化用戶操作數據庫的代碼的同時可以隨時輸出sql語句排查錯誤。 

最后需要說明一點,本文所涉及的ASP數據庫操作並不適合大型數據,如你所知,操作大型數據最好還是使用存儲過程之類的東東比較好,以后俺會考慮把對存儲過程的操作也封裝進去。還有一個效率問題,要追求高效率的話,用ASP還是應該考慮COM+等,所以再次聲明,本類適用的對象是中小型ASP項目。 

好了,下面奉上詳細使用說明: 

一.數據庫連接 

考慮到大多數人的使用習慣,在數據庫連接上使用了公共過程,所以需要大家在代碼裡自行修改,如果你已經建立了數據庫連接,把這幾行注釋掉就行了。代碼中內置了MSSql,Access,MySQL,Oracle4種數據庫的連接方式,當然你也可以自行在源代碼中增加或刪除。修改例如: 

Dim a : a = CreatConn(0, "TestData", "localhost", "username", "userpassword") 
Dim b : b = CreatConn(1, "Data/%TestDb%.mdb", "", "", "") 

說明一下,第1個參數可以是字符串。如果是使用Access,則第2個參數輸入相對路徑和絕對路徑都是可以的,如有密碼也可以在第5個參數中輸入,如: 

Dim c : c = CreatConn("ACCESS", "E:\MyWeb\Data\%TestDB%.mdb", "", "", "mdbpassword") 

相關函數: 

原 型:CreatConn(dbType, strDB, strServer, strUid, strPwd) 
功 能:建立數據庫連接字符串 
返回值:String 
參 數: 
dbType : Integer or String 連接數據庫類型 
(0 or "MSSQL") - Microsoft SQL Server 
(1 or "ACCESS") - Microsoft Office Access 
(2 or "MYSQL") - MySQL Server 
(3 or "ORACLE") - oracle Server 
strDB : String 數據庫名或數據庫地址(Access使用絕對或者相對路徑均可) 
strServer : String 數據庫服務器地址,Access請留空 
strUid : String 數據庫用戶名,Access請留空 
strPwd : String 數據庫密碼 

原 型:Oc(connStr) 
功 能:打開數據庫連接 
返回值:Object 數據庫連接對像 
參 數: 
connStr : String 數據庫連接字符串,由CreatConn函數生成 

原 型:Co(obj) 
功 能:關閉對像 
參 數: 
obj : Object 要關閉的對象名稱 

原 型:OpenConn 
功 能:打開默認數據庫連接,會自動建立一個名稱為Conn的連接對像 
參 數:無 

原 型:CloseConn 
功 能:關閉名稱為Conn的默認數據庫連接對像 
參 數:無 

二. 數據庫操作 

下面就是本數據庫操作類的函數功能說明,應該算是手冊了,請多看例子的應用。 

原 型:dbCtrl.dbConn(objConn) 
功 能:獲取數據庫連接對像 
參 數: 
objConn : Object 已經建立的數據庫連接對像 
舉 例: 
Dim db : Set db = New DbCtrl 
db.dbConn = Oc(CreatConn(1,"E:\WebSite\MySite\Data\%TestDb%.mdb","","","")) 
Co(db) 

說 明:此屬性為可選,如果不指定此屬性則默認數據連接為頁面上名稱為Conn的數據庫連接對像 

原 型:dbCtrl.AutoID(TableName) 
功 能:自動獲取唯一序列號(自動編號) 
返回值:Integer 
參 數: 
TableName : String 需要獲得唯一序列號的數據表名 
舉 例: 
Dim newId 
newId = db.AutoId("TestTable") 
Response.Write(newId) 

原 型:dbCtrl.GetRecord(TableName,FieldsList,Condition,OrderField,ShowN) 
功 能:取得符合條件的紀錄集 
返回值:Object 紀錄集對像 
參 數: 
TableName : String 表名稱 
FieldsList : String 字段名稱,用逗號隔開,留空則為全部字段 
Condition : String or Array 查詢條件,如果是數組應遵循前面的參數約定 
orderField : String 排序方式 
ShowN : Integer 獲取紀錄的數量,相當於sql中的 Select Top N 
舉 例: 
Dim rs 
Set rs = db.GetRecord("TestTable","fId,fName,fAge","fSex='男' And IsActive = 1","fName Asc", 0) 
While Not rs.eof 
Response.Write ("Name is:" & rs(1) & " Age is:" & rs(2) & "<br />") 
rs.movenext() 
Wend 
db.C(rs) 

對於以上的例子,用下面的數組方式指定條件是等價的: 

Set rs = db.wGetRecord("TestTable","fId,fName,fAge", Array("fSex:男","IsActive:1"), "fName Asc", 0) 

另外,你可以用下面的語句來查看這個函數生成的sql語句: 

Response.Write(db.wGetRecord("TestTable","fId,fName,fAge", Array("fSex:男","IsActive:1"), "fName Asc", 0)) 

如你所見,只需要在原來的函數前加一個w即可。 

原 型:dbCtrl.GetRecordBySQL(strSelect) 
功 能:根據sql語句取得紀錄集 
返回值:Object 紀錄集對像 
參 數: 
strSelect : String 用於生成記錄集的SQL語句 
舉 例: 
Dim rs 
Set rs = db.GetRecordBySQL("Select a.Id, a.LastName, b.Group From User a InnerJoin Depart b On a.GroupId = b.GroupId") 
'Your Code Here ... 
db.C(rs) 

原 型:dbCtrl.GetRecordDetail(TableName, Condition) 
功 能:根據某一條指定紀錄的詳細數據 
返回值:Object 紀錄集對像 
參 數: 
TableName : String 表名稱 
Condition : String or Array 查詢條件,如果是數組應遵循前面的參數約定 
舉 例: 
Dim rs, Id 
Id = Request.QueryString("id") 
Set rs = db.GetRecordDetail("TestTable","Id=" & id) 
'Your Code here... 
db.C(rs) 

說 明:就像你已經看出來的一樣,這個最常用在打開某個詳細頁面(比如新聞內容頁面) 

原 型:dbCtrl.AddRecord(TableName, ValueList) 
功 能:添加一個新的紀錄 
返回值:新記錄的Id號(成功) or 0 (失敗) 
參 數: 
TableName : String 表名稱 
ValueList : Array 插入表的字段和值,只能是數組且應遵循前面的參數約定 
舉 例: 
Dim fName, fSex, fWorkYear, fBirth 
fName = "王二壇" 
fSex = "" 
fWorkYear = 12 
fBirth = Cdate("1981-10-23") 
Dim result 
result = db.AddRecord("TestTable",Array("Name:"&fName, "Sex:"&fSex, "WorkYear:"&fWorkYear, "Birthday:"&fBirth, "IsActive:True")) 
If result<>0 Then 
Response.Write("添加記錄成功!此記錄的自動編號Id為" & result) 
End If 

看見了吧,真的不用考慮字段的類型是什麽滴。 
如果你想要代碼中的字段和值看得更清楚一點,也可以這樣寫,但憑卿之所好: 

result = db.AddRecord("TestTable",Array("Name:" & fName,_ 
"Sex:" & fSex,_ 
"WorkYear:" & fWorkYear,_ 
"Birthday:" & fBirth,_ 
"IsActive:True")) 

另外,你可以用下面的語句來查看這個函數生成的sql語句: 

Response.Write(db.wAddRecord("TestTable",Array("Name:"&fName, "Sex:"&fSex, "WorkYear:"&fWorkYear, "Birthday:"&fBirth, "IsActive:True"))) 

說 明:返回的Id值用的是比較笨的方法,並不能保證在並發數據量大的時候的准確性,慎用。 

原 型:dbCtrl.UpdateRecord(TableName, Condition, ValueList) 
功 能:根據指定條件更新紀錄 
返回值:1 (成功) or 0 (失敗) 
參 數: 
TableName : String 表名稱 
Condition : String or Array 更新條件,如果是數組應遵循前面的參數約定 
ValueList : String or Array 更新的字段及值,如果是數組應遵循前面的參數約定 
舉 例: 
Dim fName, fWorkYear 
fName = "王三壇" 
fWorkYear = 10 
Dim result 
result = db.UpdateRecord("TestTable", "UId = 1308", Array("Name:"&fName, "WorkYear:"&fWorkYear)) 
If result<>0 Then 
Response.Write("更新數據成功!") 
End If 

另外,你可以用下面的語句來查看這個函數生成的sql語句: 

Response.Write(db.wUpdateRecord("TestTable", "UId = 1308", Array("Name:"&fName, "WorkYear:"&fWorkYear))) 

原 型:dbCtrl.DeleteRecord(TableName,IDFieldName,IDValues) 
功 能:刪除符合條件的紀錄 
返回值:1 (成功) or 0 (失敗) 
參 數: 
TableName : String 表名稱 
IDFieldName : String 表的Id字段的名稱 
IDValues : String or Array 刪除條件,可以是由逗號隔開的多個Id號,如果是數組應遵循前面的參數約定 
舉 例: 
Dim ids, result 
ids = Request.Form("selectid") '可以假設這裡獲取的值是 12, 34, 256, 314 (復選框提交的值都這樣) 
result = db.DeleteRecord("TestTable", "UId", ids) 
If result<>0 Then 
Response.Write("刪除數據成功!") 
End If 

當然,你也可以用字符串或者數組指定其它的條件,比如: 

result = db.DeleteRecord("TestTable", "UId", "IsActive = 0 And FirstName = 'Tom'") 

另外,你可以用下面的語句來查看這個函數生成的sql語句: 

Response.Write(db.wDeleteRecord("TestTable", "UId", ids)) 

原 型:dbCtrl.ReadTable(TableName, Condition, GetFieldNames) 
功 能:根據指定條件獲取某條紀錄中的其他字段的內容 
返回值:String (GetFieldNames為單個字段) or Array (GetFieldNames為多個字段) 
參 數: 
TableName : String 表名稱 
Condition : String or Array 查詢條件,如果是數組應遵循前面的參數約定 
GetFieldNames : String 單個字段名或者由逗號隔開的多個字段名 
舉 例: 
Dim uid, result 
uid = rs("postid") '假設這裡是頁面上某個記錄集中的用戶id值 
result = db.ReadTable("UserTable","UId=" & uid, "UserName") 
Response.Write("發佈者:" & result) 

我不得不說,在實際應用中,這個函數可能是用得最多的,你上面看到的就是一個非常常用的例子,從一個值去獲取另外一個表中某字段值等於該值的另外一個字段的值(有點拗口,不過確實就是這個意思)。下面的例子將告訴你如何根據這個值獲得多個相應的值。 

Dim uid, result 
uid = rs("postid") '假設這裡是頁面上某個記錄集中的用戶id值 
result = db.ReadTable("UserTable","UId=" & uid, "UserName,UserSex,UserAge") 
Response.Write("發佈者:" & result(0) & "<br /> 性別:" & result(1) & "<br /> 年齡:" &result(2)) 

如你所見,就這麽簡單,輸入多個字段名稱得到的是一個數組。 

原 型:dbCtrl.C(objRs) 
功 能:關閉紀錄集對像 
參 數: 
objRs : Object 頁面上的某個記錄集對像 
舉 例: 
Dim rs 
Set rs = db.GetRecordDetail("TestTable","Id=123" ) 
'Your Code here... 
db.C(rs) 

這個函數上面的許多例子都用了,就不多解釋了,它等同於rs.close : set rs = nothing
<%
'==========================================================================
'文件名稱:clsDbCtrl.asp
'功  能:數據庫操作類

Dim a : a = CreatConn(0, "master", "localhost", "sa", "")    'MSSQL數據庫
'Dim a : a = CreatConn(1, "Data/%TestDB%.mdb", "", "", "")    'Access數據庫
'Dim a : a = CreatConn(1, "E:\MyWeb\Data\%TestDB%.mdb", "", "", "mdbpassword")
Dim Conn
'OpenConn()    '在加載時就建立的默認連接對象Conn,默認使用數據庫a
Sub OpenConn : Set Conn = Oc(a) : End Sub
Sub CloseConn : Co(Conn) : End Sub

Function Oc(ByVal Connstr)
    On Error Resume Next
    Dim objConn
    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open Connstr
    If Err.number <> 0 Then
        Response.Write("<div id=""DBError"">數據庫服務器端連接錯誤,請與網站管理員聯系。</div>")
        'Response.Write("錯誤信息:" & Err.Description)
        objConn.Close
        Set objConn = Nothing
        Response.End
    End If
    Set Oc = objConn
End Function

Sub Co(obj)
    On Error Resume Next
    Set obj = Nothing
End Sub

Function CreatConn(ByVal dbType, ByVal strDB, ByVal strServer, ByVal strUid, ByVal strPwd)
    Dim TempStr
    Select Case dbType
        Case "0","MSSQL"
            TempStr = "driver={sql server};server="&strServer&";uid="&strUid&";pwd="&strPwd&";database="&strDB
        Case "1","ACCESS"
            Dim tDb : If Instr(strDB,":")>0 Then : tDb = strDB : Else : tDb = Server.MapPath(strDB) : End If
            TempStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&tDb&";Jet OLEDB:Database Password="&strPwd&";"
        Case "3","MYSQL"
            TempStr = "Driver={mySQL};Server="&strServer&";Port=3306;Option=131072;Stmt=; Database="&strDB&";Uid="&strUid&";Pwd="&strPwd&";"
        Case "4","ORACLE"
            TempStr = "Driver={Microsoft ODBC for Oracle};Server="&strServer&";Uid="&strUid&";Pwd="&strPwd&";"
    End Select
    CreatConn = TempStr
End Function


Class dbCtrl
    Private debug
    Private idbConn
    Private idbErr
    
    Private Sub Class_Initialize()
        debug = true                    '調試模式是否開啟
        idbErr = "出現錯誤:"
        If IsObject(Conn) Then
            Set idbConn = Conn
        End If
    End Sub
    
    Private Sub Class_Terminate()
        Set idbConn = Nothing
        If debug And idbErr<>"出現錯誤:" Then Response.Write(idbErr)
    End Sub
    
    Public Property Let dbConn(pdbConn)
        If IsObject(pdbConn) Then
            Set idbConn = pdbConn
        Else
            Set idbConn = Conn
        End If
    End Property
    
    Public Property Get dbErr()
        dbErr = idbErr
    End Property
    
    Public Property Get Version
        Version = "ASP Database Ctrl V1.0 By ColdStone"
    End Property

    Public Function AutoID(ByVal TableName)
        On Error Resume Next
        Dim m_No,Sql, m_FirTempNo
        Set m_No=Server.CreateObject("adodb.recordset")
        Sql="SELECT * FROM ["&TableName&"]"
        m_No.Open Sql,idbConn,3,3
        If m_No.EOF Then
            AutoID=1
        Else
            Do While Not m_No.EOF
                m_FirTempNo=m_No.Fields(0).Value 
                m_No.MoveNext
                  If m_No.EOF Then 
                        AutoID=m_FirTempNo+1
                  End If
            Loop
        End If
        If Err.number <> 0 Then
            idbErr = idbErr & "無效的查詢條件!<br />"
            If debug Then idbErr = idbErr & "錯誤信息:"& Err.Description
            Response.End()
            Exit Function
        End If
        m_No.close
        Set m_No = Nothing
    End Function

    Public Function GetRecord(ByVal TableName,ByVal FieldsList,ByVal Condition,ByVal OrderField,ByVal ShowN)
        On Error Resume Next
        Dim rstRecordList
        Set rstRecordList=Server.CreateObject("adodb.recordset")
            With rstRecordList
            .ActiveConnection = idbConn
            .CursorType = 3
            .LockType = 3
            .Source = wGetRecord(TableName,FieldsList,Condition,OrderField,ShowN)
            .Open 
            If Err.number <> 0 Then
                idbErr = idbErr & "無效的查詢條件!<br />"
                If debug Then idbErr = idbErr & "錯誤信息:"& Err.Description
                .Close
                Set rstRecordList = Nothing
                Response.End()
                Exit Function
            End If    
        End With
        Set GetRecord=rstRecordList
    End Function
    
    Public Function wGetRecord(ByVal TableName,ByVal FieldsList,ByVal Condition,ByVal OrderField,ByVal ShowN)
        Dim strSelect
        strSelect="select "
        If ShowN > 0 Then
            strSelect = strSelect & " top " & ShowN & " "
        End If
        If FieldsList<>"" Then
            strSelect = strSelect & FieldsList
        Else
            strSelect = strSelect & " * "
        End If
        strSelect = strSelect & " from [" & TableName & "]"
        If Condition <> "" Then
            strSelect = strSelect & " where " & ValueToSql(TableName,Condition,1)
        End If
        If OrderField <> "" Then
            strSelect = strSelect & " order by " & OrderField
        End If
        wGetRecord = strSelect
    End Function

    Public Function GetRecordBySQL(ByVal strSelect)
        On Error Resume Next
        Dim rstRecordList
        Set rstRecordList=Server.CreateObject("adodb.recordset")
            With rstRecordList
            .ActiveConnection =idbConn
            .CursorType = 3
            .LockType = 3
            .Source = strSelect
            .Open 
            If Err.number <> 0 Then
                idbErr = idbErr & "無效的查詢條件!<br />"
                If debug Then idbErr = idbErr & "錯誤信息:"& Err.Description
                .Close
                Set rstRecordList = Nothing
                Response.End()
                Exit Function
            End If    
        End With
        Set GetRecordBySQL = rstRecordList
    End Function

    Public Function GetRecordDetail(ByVal TableName,ByVal Condition)
        On Error Resume Next
        Dim rstRecordDetail, strSelect
        Set rstRecordDetail=Server.CreateObject("adodb.recordset")
        With rstRecordDetail
            .ActiveConnection =idbConn
            strSelect = "select * from [" & TableName & "] where " & ValueToSql(TableName,Condition,1)
            .CursorType = 3
            .LockType = 3
            .Source = strSelect
            .Open 
            If Err.number <> 0 Then
                idbErr = idbErr & "無效的查詢條件!<br />"
                If debug Then idbErr = idbErr & "錯誤信息:"& Err.Description
                .Close
                Set rstRecordDetail = Nothing
                Response.End()
                Exit Function
            End If
        End With
        Set GetRecordDetail=rstRecordDetail
    End Function

    Public Function AddRecord(ByVal TableName, ByVal ValueList)
        On Error Resume Next
        DoExecute(wAddRecord(TableName,ValueList))
        If Err.number <> 0 Then
            idbErr = idbErr & "寫入數據庫出錯!<br />"
            If debug Then idbErr = idbErr & "錯誤信息:"& Err.Description
            'DoExecute "ROLLBACK TRAN Tran_Insert"    '如果存在添加事務(事務滾回)
            AddRecord = 0
            Exit Function
        End If
        AddRecord = AutoID(TableName)-1
    End Function
    
    Public Function wAddRecord(ByVal TableName, ByVal ValueList)
        Dim TempSQL, TempFiled, TempValue
        TempFiled = ValueToSql(TableName,ValueList,2)
        TempValue = ValueToSql(TableName,ValueList,3)
        TempSQL = "Insert Into [" & TableName & "] (" & TempFiled & ") Values (" & TempValue & ")"
        wAddRecord = TempSQL
    End Function

    Public Function UpdateRecord(ByVal TableName,ByVal Condition,ByVal ValueList)
        On Error Resume Next
        DoExecute(wUpdateRecord(TableName,Condition,ValueList))
        If Err.number <> 0 Then
            idbErr = idbErr & "更新數據庫出錯!<br />"
            If debug Then idbErr = idbErr & "錯誤信息:"& Err.Description
            'DoExecute "ROLLBACK TRAN Tran_Update"    '如果存在添加事務(事務滾回)
            UpdateRecord = 0
            Exit Function
        End If
        UpdateRecord = 1
    End Function

    Public Function wUpdateRecord(ByVal TableName,ByVal Condition,ByVal ValueList)
        Dim TmpSQL
        TmpSQL = "Update ["&TableName&"] Set "
        TmpSQL = TmpSQL & ValueToSql(TableName,ValueList,0)
        TmpSQL = TmpSQL & " Where " & ValueToSql(TableName,Condition,1)
        wUpdateRecord = TmpSQL
    End Function

    Public Function DeleteRecord(ByVal TableName,ByVal IDFieldName,ByVal IDValues)
        On Error Resume Next
        Dim Sql
        Sql = "Delete From ["&TableName&"] Where ["&IDFieldName&"] In ("
        If IsArray(IDValues) Then
            Sql = Sql & "Select ["&IDFieldName&"] From ["&TableName&"] Where " & ValueToSql(TableName,IDValues,1)
        Else
            Sql = Sql & IDValues
        End If
        Sql = Sql & ")"
        DoExecute(Sql)
        If Err.number <> 0 Then
            idbErr = idbErr & "刪除數據出錯!<br />"
            If debug Then idbErr = idbErr & "錯誤信息:"& Err.Description
            'DoExecute "ROLLBACK TRAN Tran_Delete"    '如果存在添加事務(事務滾回)
            DeleteRecord = 0 
            Exit Function
        End If
        DeleteRecord = 1
    End Function
    
    Public Function wDeleteRecord(ByVal TableName,ByVal IDFieldName,ByVal IDValues)
        On Error Resume Next
        Dim Sql
        Sql = "Delete From ["&TableName&"] Where ["&IDFieldName&"] In ("
        If IsArray(IDValues) Then
            Sql = Sql & "Select ["&IDFieldName&"] From ["&TableName&"] Where " & ValueToSql(TableName,IDValues,1)
        Else
            Sql = Sql & IDValues
        End If
        Sql = Sql & ")"
        wDeleteRecord = Sql
    End Function 

    Public Function ReadTable(ByVal TableName,ByVal Condition,ByVal GetFieldNames)
        On Error Resume Next
        Dim rstGetValue,Sql,BaseCondition,arrTemp,arrStr,TempStr,i
        TempStr = "" : arrStr = ""
        '給出SQL條件語句
        BaseCondition = ValueToSql(TableName,Condition,1)
        '讀取數據
        Set rstGetValue = Server.CreateObject("ADODB.Recordset")
        Sql = "Select "&GetFieldNames&" From ["&TableName&"] Where "&BaseCondition
        rstGetValue.Open Sql,idbConn,3,3
        If rstGetValue.RecordCount > 0 Then
            If Instr(GetFieldNames,",")>0 Then
                arrTemp = Split(GetFieldNames,",")
                For i = 0 To Ubound(arrTemp)
                    If i<>0 Then arrStr = arrStr &Chr(112)&Chr(112)&Chr(113)
                    arrStr = arrStr & rstGetValue.Fields(i).Value
                Next
                TempStr = Split(arrStr,Chr(112)&Chr(112)&Chr(113))
            Else
                TempStr = rstGetValue.Fields(0).Value
            End If
        End If
        If Err.number <> 0 Then
            idbErr = idbErr & "獲取數據出錯!<br />"
            If debug Then idbErr = idbErr & "錯誤信息:"& Err.Description
            rstGetValue.close()
            Set rstGetValue = Nothing
            Exit Function
        End If
        rstGetValue.close()
        Set rstGetValue = Nothing
        ReadTable = TempStr
    End Function

    Public Function C(ByVal ObjRs)
        ObjRs.close()
        Set ObjRs = Nothing
    End Function
    
    Private Function ValueToSql(ByVal TableName, ByVal ValueList, ByVal sType)
        Dim StrTemp
        StrTemp = ValueList
        If IsArray(ValueList) Then
            StrTemp = ""
            Dim rsTemp, CurrentField, CurrentValue, i
            Set rsTemp = Server.CreateObject("adodb.recordset")
            With rsTemp
                .ActiveConnection = idbConn
                .CursorType = 3
                .LockType = 3
                .Source ="select * from [" & TableName & "] where 1 = -1"
                .Open
                For i = 0 to Ubound(ValueList)
                    CurrentField = Left(ValueList(i),Instr(ValueList(i),":")-1)
                    CurrentValue = Mid(ValueList(i),Instr(ValueList(i),":")+1)
                    If i <> 0 Then
                        Select Case sType
                            Case 1
                                StrTemp = StrTemp & " And "
                            Case Else
                                StrTemp = StrTemp & ", "
                        End Select
                    End If
                    If sType = 2 Then
                        StrTemp = StrTemp & "[" & CurrentField & "]"
                    Else
                        Select Case .Fields(CurrentField).Type
                            Case 7,133,134,135,8,129,200,201,202,203
                                If sType = 3 Then
                                    StrTemp = StrTemp & "'"&CurrentValue&"'"
                                Else
                                    StrTemp = StrTemp & "[" & CurrentField & "] = '"&CurrentValue&"'"
                                End If
                            Case 11
                                If UCase(cstr(Trim(CurrentValue)))="TRUE" Then
                                    If sType = 3 Then
                                        StrTemp = StrTemp & "1"
                                    Else
                                        StrTemp = StrTemp & "[" & CurrentField & "] = 1"
                                    End If
                                Else 
                                    If sType = 3 Then
                                        StrTemp = StrTemp & "0"
                                    Else
                                        StrTemp = StrTemp & "[" & CurrentField & "] = 0"
                                    End If
                                End If
                            Case Else
                                If sType = 3 Then
                                    StrTemp = StrTemp & CurrentValue
                                Else
                                    StrTemp = StrTemp & "[" & CurrentField & "] = " & CurrentValue
                                End If
                        End Select
                    End If
                Next
            End With
            If Err.number <> 0 Then
                idbErr = idbErr & "生成SQL語句出錯!<br />"
                If debug Then idbErr = idbErr & "錯誤信息:"& Err.Description
                rsTemp.close()
                Set rsTemp = Nothing
                Exit Function
            End If
            rsTemp.Close()
            Set rsTemp = Nothing
        End If
        ValueToSql = StrTemp
    End Function

    Private Function DoExecute(ByVal sql)
        Dim ExecuteCmd
        Set ExecuteCmd = Server.CreateObject("ADODB.Command")
        With ExecuteCmd
            .ActiveConnection = idbConn
            .CommandText = sql
            .Execute
        End With
        Set ExecuteCmd = Nothing
    End Function
End Class
%>
<%Session.CodePage=936%>
<!--#include file="clsDbctrl.asp" -->
<%
Dim db : Set db = New DbCtrl   'create object
db.dbConn = Oc(a)   'create connect
Dim rs : Set rs = db.GetRecordBySQL("select * from product order by ID Asc")  'create rs -GetRecordBySQL
While Not rs.eof   
Response.Write ("Name is:" & rs("id") & " Age is:" & rs("Title") & "<br />")   
rs.movenext()   
Wend   
db.C(rs)   'close rs
Co(db) : CloseConn() 'close object,close    connect
%>

 http://blog.csdn.net/smartsmile2012/article/details/8189283


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM