ASP数据库操作类

< %
' ==========================================================================
'
文件名称:clsDbCtrl.asp
'
功  能:数据库操作类
'
作  者:coldstone (coldstone[在]qq.com)
'
程序版本:v1.0.5
'
完成时间:2005.09.23
'
修改时间:2007.10.30
'
版权声明:可以在任意作品中使用本程序代码,但请保留此版权信息。
'
          如果你修改了程序中的代码并得到更好的应用,请发送一份给我,谢谢。
'
轉自:http://www.ezsaler.com/Blog/post/158.html
'
==========================================================================

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
%
>

你可能感兴趣的:(asp)