VBScript 教程之数据库篇,以 vbscript DBHelper 类的方式,封装数据库连接、查询、基本的存储过程访问方法。
option Explicit
' 数据库读取选项
Public Const adOpenStatic = 3
Public Const adLockReadOnly = 1
Public Const adLockOptimistic = 3
Public Const adCmdStoredProc = 4
Public Const adInteger=3
Public Const adChar=129
Public Const adVarchar = 200
Public Const adDate=7
Public Const adParamInput=1
Public Const adParamReturnValue=4
Public Const LogTypeInfo = 0
Public Const LogTypeError = 1
Public Const LogTypeWarning = 2
Class DBHelper
    Private oConn
    Private Sub Class_Initialize
        Set oConn = Nothing
    End Sub
    ' ***************************************************************************
    ' 创建 ADODB.Connection 对象,连接数据库
    ' ***************************************************************************
    Public Function Connect(server, database, uid, password)
        Dim sDSNRef
        Dim sMsg
        ' 创建 ADO 数据库连接对象
        On Error Resume Next
        Set oConn = CreateObject("ADODB.Connection")
        If Err then
            ShowMessage "错误 - 无法创建 ADODB.Connection 对象, 不能查询 SQL Server: " & Err.Description & " (" & Err.Number & ")", LogTypeError
            Set Connect = Nothing
            Exit Function
        End If
        On Error Goto 0
        ' 构建连接字符串
        sDSNRef = "Provider=SQLOLEDB;OLE DB Services=0;Data Source=" & server & ";Initial Catalog=" & database
        sDSNRef = sDSNRef & ";User ID=" & uid & ";Password=" & password
        ' 正在连接数据库
        ShowMessage "Connecting to SQL Server using connect string: " & sDSNref, LogTypeInfo
        On Error Resume Next
        oConn.Open sDSNref
        If Err then
            sMsg = Err.Description & " (" & Err.Number & ")"
            ShowMessage "error opening SQL connection: " & sMsg, LogTypeError
            iRetVal = Failure
            ShowMessage "error opening SQL Connection: " & sMsg, LogTypeError
            For each objErr in oConn.Errors
                ShowMessage "  ADO error: " & objErr.Description & " (Error #" & objErr.Number & "; Source: " & objErr.Source & "; SQL State: " & objErr.SQLState & "; NativeError: " & objErr.NativeError & ")", LogTypeError
            Next
            Err.Clear
            Set Connect = Nothing
            Exit Function
        End If
        On Error Goto 0
        ShowMessage "Successfully opened connection to database.", LogTypeInfo
        ' Return the connection to the caller
        Set Connect = oConn
    End Function
    ' ***************************************************************************
    ' 创建 ADODB.Recordset 对象,执行数据库查询,返回 Recordset 对象。
    ' ***************************************************************************
    Public Function Query(strSQL)
        Dim oRS
        ' Create ADO recordset object
        On Error Resume Next
        Set oRS = CreateObject("ADODB.Recordset")
        If Err then
            Set Query = Nothing
            ShowMessage "ERROR - Unable to create ADODB.Recordset object, impossible to query SQL Server: " & Err.Description & " (" & Err.Number & ")", LogTypeError
            Exit Function
        End If
        On Error Goto 0
        ' Issue the SQL statement
        ShowMessage "About to issue SQL statement: " & strSQL, LogTypeInfo
        On Error Resume Next
        oRS.Open strSQL, oConn, adOpenStatic, adLockReadOnly
        If Err then
            Set Query = Nothing
            ShowMessage "ERROR - Opening Record Set (Error Number = " & Err.Number & ") (Error Description: " & Err.Description & ").", LogTypeError
            For each objErr in oConn.Errors
                ShowMessage "  ADO error: " & objErr.Description & " (Error #" & objErr.Number & "; Source: " & objErr.Source & "; SQL State: " & objErr.SQLState & "; NativeError: " & objErr.NativeError & ")", LogTypeError
            Next
            oRS.Close
            Err.Clear
            Exit Function
        End If
        On Error Goto 0
        ShowMessage "Successfully queried the database.", LogTypeInfo
        Set Query = oRS
    End Function
    ' ***************************************************************************
    ' 创建 ADODB.Command 对象,执行数据库存储过程,返回 Command 对象。
    ' 注意:存储过程要求,没有返回值对象,返回值以Select方式返回,存储过程需要使用
    ' set nocount on,禁用影响行数消息。
    ' ***************************************************************************
    Public Function ExecuteProc(strSQL)
        Dim oComm,oRS
        ' Create ADO recordset object
        On Error Resume Next
        Set oComm = CreateObject("ADODB.Command")
        If Err then
            Set ExecuteProc = Nothing
            ShowMessage "ERROR - Unable to create ADODB.Command object, impossible to query SQL Server: " & Err.Description & " (" & Err.Number & ")", LogTypeError
            Exit Function
        End If
        On Error Goto 0
        ' 分解参数
        Dim sql,cmd,parm,parms,p,index
        sql = Split(strSQL," ")
        If UBound(sql) = 1 Then
            cmd = sql(0)
            parm = Right(strSQL,Len(strSQL)-Len(cmd))
            parms = Split(parm,",")
            index = 0
            For Each p In parms
                p = LTrim(Replace(p,"'",""))
                Dim para
                Set para = CreateObject("ADODB.Parameter")
                para.Name = index
                para.Type = adVarchar
                para.Size = 1000
                para.Direction = adParamInput
                para.Value = p
                oComm.Parameters.Append para
                index = index + 1
            Next
        Else
            cmd = strSQL
        End If
        ' Issue the SQL statement
        ShowMessage "About to issue SQL statement: " & strSQL, LogTypeInfo
        On Error Resume Next
        oComm.CommandType = adCmdStoredProc
        oComm.ActiveConnection = oConn
        oComm.CommandText = cmd
        Set oRS = oComm.Execute
        If Err then
            Set ExecuteProc = Nothing
            ShowMessage "ERROR - Opening Command (Error Number = " & Err.Number & ") (Error Description: " & Err.Description & ").", LogTypeError
            For each objErr in oConn.Errors
                ShowMessage "  ADO error: " & objErr.Description & " (Error #" & objErr.Number & "; Source: " & objErr.Source & "; SQL State: " & objErr.SQLState & "; NativeError: " & objErr.NativeError & ")", LogTypeError
            Next
            oComm.Close
            Err.Clear
            Set ExecuteProc = Nothing
            Exit Function
        End If
        On Error Goto 0
        ShowMessage "Successfully queried the database.", LogTypeInfo
        Set ExecuteProc = oRS
    End Function
End Class