主题:[原创]AdodbHelper更新啦
代码功能:
封装常用的数据库访问操作,注意一下,我们这个类支持的是Access数据库。
代码路径:https://code.csdn.net/snippets/1576301
代码:
'////////说明////////
'使用前,请先引用:Microsoft ActiveX Data Objects 2.5 Library
'引用方式:工程→引用→Microsoft ActiveX Data Objects 2.5 Library
'最后修改日期:2015年1月15日22:16:43
'2015年01月15日22:19:23 全部重新格式化
'2016年02月09日15:33:17 更新部分Adodb缺失
'成员变量:连接对象
Private m_Conn As ADODB.Connection
'成员变量:SQL命令对象
Private m_Command As ADODB.Command
'成员变量:连接字符串
Private m_ConnString As String
'成员变量:数据库文件路径
Private m_FilePath As String
'成员变量:自身对象
Private m_Me As New AdodbHelper
'规定:每个函数执行完成后,都必须清空m_Command,并且创建一个空的对象
'【类初始化、释放】
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : Class_Initialize
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:56
'
' Parameters :
'--------------------------------------------------------------------------------
'</CSCM>
Private Sub Class_Initialize()
End Sub
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : Class_Terminate
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:56
'
' Parameters :
'--------------------------------------------------------------------------------
'</CSCM>
Private Sub Class_Terminate()
Set m_Conn = Nothing
Set m_Command = Nothing
End Sub
'【类属性】
'读取:数据库连接字符串
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : ConnectionString
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:56
'
' Parameters :
'--------------------------------------------------------------------------------
'</CSCM>
Public Property Get ConnectionString() As String
ConnectionString = m_ConnString
End Property
'设置:连接字符串
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : ConnectionString
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:56
'
' Parameters : vNewValue (String)
'--------------------------------------------------------------------------------
'</CSCM>
Public Property Let ConnectionString(ByVal vNewValue As String)
m_ConnString = vNewValue
End Property
'类是否准备好,是否可以执行SQL
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : IsReady
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:56
'
' Parameters :
'--------------------------------------------------------------------------------
'</CSCM>
Public Property Get IsReady() As Boolean
IsReady = IIf(Len(ConnectionString) > 0, True, False)
End Property
'【类方法】
'执行查询,返回离线记录集
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : ExecQuery
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : SqlStr (String)
'--------------------------------------------------------------------------------
'</CSCM>
Public Function ExecQuery(ByVal SqlStr As String) As ADODB.Recordset
Dim tempRes As New ADODB.Recordset
Set m_Command = New ADODB.Command
Call OpenConn
m_Command.ActiveConnection = m_Conn
m_Command.CommandText = SqlStr
Set tempRes = m_Command.Execute()
tempRes.ActiveConnection = Nothing
Call CloseConn
Set ExecQuery = tempRes
Set m_Command = Nothing
End Function
'执行参数化查询,返回离线记录集
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : ExecParamQuery
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : SqlStr (String)
' Params() (Variant)
'--------------------------------------------------------------------------------
'</CSCM>
Public Function ExecParamQuery(ByVal SqlStr As String, _
ParamArray Params()) As ADODB.Recordset
Dim tempRes As New ADODB.Recordset
Dim i As Long
Dim paramArr As Variant
Set m_Command = New ADODB.Command
'打开连接
Call OpenConn
m_Command.ActiveConnection = m_Conn
m_Command.CommandText = SqlStr
m_Command.CommandType = adCmdText
'过滤嵌套情况
paramArr = Params
If VarType(Params(0)) = 8204 Then
paramArr = Params(0)
End If
'设置参数
With m_Command
For Each param In paramArr
Dim Para As ADODB.Parameter
Set Para = .CreateParameter(CStr(i), GetVarType(param), adParamInput, LenB(param))
Para.Value = param
.Parameters.Append Para
Next
End With
'获取执行后记录集
Set tempRes = m_Command.Execute()
'与数据库连接脱钩
tempRes.ActiveConnection = Nothing
'关闭数据库连接
Call CloseConn
'返回数据集对象引用
Set ExecParamQuery = tempRes
'清空命令对象
Set m_Command = Nothing
End Function
'执行查询,返回影响行数
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : ExecNonQuery
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : SqlStr (String)
'--------------------------------------------------------------------------------
'</CSCM>
Public Function ExecNonQuery(ByVal SqlStr As String) As Long
'定义影响行数变量
Dim affectedRows As Long
'创建绑定Command对象
Set m_Command = New ADODB.Command
'打开连接
Call OpenConn
'绑定Command到数据库连接
m_Command.ActiveConnection = m_Conn
'设置SQL语句
m_Command.CommandText = SqlStr
'设置SQL类型
m_Command.CommandType = adCmdText
'获取执行后影响行数
m_Command.Execute affectedRows
'关闭数据库连接
Call CloseConn
'清空命令对象
Set m_Command = Nothing
'返回影响行数
ExecNonQuery = affectedRows
End Function
'执行参数化查询,返回影响行数
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : ExecParamNonQuery
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : SqlStr (String)
' Params() (Variant)
'--------------------------------------------------------------------------------
'</CSCM>
Public Function ExecParamNonQuery(ByVal SqlStr As String, ParamArray Params()) As Long
Dim i As Long
Dim affectedRows As Long
Dim paramArr As Variant
Set m_Command = New ADODB.Command
'打开连接
Call OpenConn
m_Command.ActiveConnection = m_Conn
m_Command.CommandText = SqlStr
m_Command.CommandType = adCmdText
'过滤嵌套情况
paramArr = Params
If VarType(Params(0)) = 8204 Then
paramArr = Params(0)
End If
'设置参数
With m_Command
For Each param In paramArr
Dim Para As ADODB.Parameter
Set Para = .CreateParameter(CStr(i), GetVarType(param), adParamInput, LenB(param))
Para.Value = param
.Parameters.Append Para
Next
End With
'获取执行后记录集
m_Command.Execute affectedRows
'关闭数据库连接
Call CloseConn
'清空命令对象
Set m_Command = Nothing
'返回影响行数
ExecParamNonQuery = affectedRows
End Function
'根据文件路径设置连接字符串
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : SetConnToFile
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : FilePath (String)
'--------------------------------------------------------------------------------
'</CSCM>
Public Sub SetConnToFile(ByVal FilePath As String)
m_ConnString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath & ";"
End Sub
'释放离线记录集
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : ReleaseRecordset
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : dbRes (ADODB.Recordset)
'--------------------------------------------------------------------------------
'</CSCM>
Public Sub ReleaseRecordset(ByRef dbRes As ADODB.Recordset)
Set dbRes = Nothing
End Sub
'将制定表数据从一个数据库文件插入到另一个数据库文件中
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : TransData
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : SourceDb (String)
' DestDb (String)
' tableNames() (Variant)
'--------------------------------------------------------------------------------
'</CSCM>
Public Sub TransData(ByVal SourceDb As String, _
ByVal DestDb As String, _
ParamArray tableNames())
Dim TableName As Variant
m_Me.SetConnToFile SourceDb
If UBound(tableNames) <= 0 Then
Exit Sub
End If
For Each TableName In tableNames
m_Me.ExecQuery "select * into [" & DestDb & "]." & TableName & " from " & TableName
Next
End Sub
'从打开数据库文件,返回一个打开的数据库连接
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : DbConnFromFile
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : FilePath (String)
'--------------------------------------------------------------------------------
'</CSCM>
Public Function DbConnFromFile(ByVal FilePath As String) As ADODB.Connection
Dim tmpConn As New ADODB.Connection
tmpConn.CursorLocation = adUseClient
tmpConn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath & ";"
Set DbConnFromFile = tmpConn
End Function
'执行参数化查询,返回首行,首列值
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : ExecParamQueryScalar
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : SqlStr (String)
' Params() (Variant)
'--------------------------------------------------------------------------------
'</CSCM>
Public Function ExecParamQueryScalar(ByVal SqlStr As String, _
ParamArray Params()) As Variant
Dim varResult As Variant
Dim tmpRes As ADODB.Recordset
Set tmpRes = ExecParamQuery(SqlStr, Params)
If tmpRes.RecordCount <= 0 Then
Set ExecParamQueryScalar = Nothing
Else
ExecParamQueryScalar = tmpRes.fields(0).Value
End If
ReleaseRecordset tmpRes
End Function
'执行查询,返回首行,首列值
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : ExecQueryScalar
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : SqlStr (String)
'--------------------------------------------------------------------------------
'</CSCM>
Public Function ExecQueryScalar(ByVal SqlStr As String) As Variant
Dim varResult As Variant
Dim tmpRes As ADODB.Recordset
Set tmpRes = ExecQuery(SqlStr)
If tmpRes.RecordCount <= 0 Then
Set ExecQueryScalar = Nothing
Else
ExecQueryScalar = tmpRes.fields(0).Value
End If
ReleaseRecordset tmpRes
End Function
'【内部方法】
'打开数据库连接
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : OpenConn
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters :
'--------------------------------------------------------------------------------
'</CSCM>
Private Sub OpenConn()
Set m_Conn = New ADODB.Connection
m_Conn.CursorLocation = adUseClient
m_Conn.Open ConnectionString
End Sub
'关闭数据库连接
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : CloseConn
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters :
'--------------------------------------------------------------------------------
'</CSCM>
Private Sub CloseConn()
m_Conn.Close
Set m_Conn = Nothing
End Sub
'返回VB变量类型返回数据库参数的类型枚举值
'<CSCM>
'--------------------------------------------------------------------------------
' Project : 类库构建项目
' Procedure : GetVarType
' Description: [type_description_here]
' Created by : Project Administrator
' Machine : MYSOFT-SUNR01
' Date-Time : 1-18-2015-18:19:55
'
' Parameters : Value (Variant)
'--------------------------------------------------------------------------------
'</CSCM>
Private Function GetVarType(ByRef Value As Variant) As ADODB.DataTypeEnum
Dim k As New ADODB.Command
Select Case VarType(Value)
Case VbVarType.vbString
GetVarType = ADODB.DataTypeEnum.adVarChar
Case VbVarType.vbInteger
GetVarType = ADODB.DataTypeEnum.adSmallInt
Case VbVarType.vbBoolean
GetVarType = ADODB.DataTypeEnum.adBoolean
Case VbVarType.vbCurrency
GetVarType = ADODB.DataTypeEnum.adCurrency
Case VbVarType.vbDate
GetVarType = ADODB.DataTypeEnum.adDate
Case 8209
GetVarType = ADODB.DataTypeEnum.adLongVarBinary
Case Else
GetVarType = ADODB.DataTypeEnum.adVariant
End Select
End Function

您所在位置: