虽然现在基本不写VB和ASP了,但感觉这个工具类还是有点意义的!
注释里添加了方法说明和示例,应该可以很容易看懂
复制下面的源代码,在VB中,新建模块,粘贴代码,并将模块名称改为:DataTool,保存后即可使用。
另外,想在VB中使用ADODB,需要引入相应的组件:Microsoft ActiveX Data Object 2.8 Library
1
'
==============================================================================================================================
2 '
3 ' VB、ASP 数据库操作工具类 DataTool v1.0
4 '
5 ' @Author : 网无忌
6 ' @Email : netwild@163.com
7 ' @Blog : http://blog.itplus.com.cn
8 '
9 ' ----------------------------------------------------------------------------------------------------------------------
10 '
11 ' 说明:该工具类封装了对于数据库的常用操作
12 ' 包括:建立数据库连接、断开数据库连接、查询数据、执行更新四个部分
13 '
14 ' ----------------------------------------------------------------------------------------------------------------------
15 '
16 ' 方法:
17 '
18 ' ┌─────────────────┬───────┬────────────────────────────────┐
19 ' │ 方法名称 │返回值 │描述
20 ' ├─────────────────┼───────┼────────────────────────────────┤
21 ' │1) DataTool.dbOpen │Boolean │建立数据库连接。
22 ' │ │ │若当前连接已建立,则使用现有连接
23 ' │ │ │否则创建新的连接对象
24 ' ├─────────────────┼───────┼────────────────────────────────┤
25 ' │2) DataTool.dbClose │无 │关闭数据库连接。
26 ' │ │ │若当前连接已关闭,则直接返回;
27 ' │ │ │否则直接关闭连接,并销毁连接对象,释放内存
28 ' │ │ │※ 建议在窗体注销或页面结束时手动调用该方法,将连接销毁
29 ' ├─────────────────┼───────┼────────────────────────────────┤
30 ' │3) DataTool.find(sql) │RecordSet │执行简单的数据库查询操作,游标仅允许向前单向移动,结果集只读
31 ' ├─────────────────┼───────┼────────────────────────────────┤
32 ' │4) DataTool.findDynamic(sql) │RecordSet │执行动态的数据库查询操作,游标允许双向移动,结果集只读
33 ' ├─────────────────┼───────┼────────────────────────────────┤
34 ' │5) DataTool.findStatic(sql) │RecordSet │执行静态的数据库查询操作,游标允许双向移动,结果集只读
35 ' ├─────────────────┼───────┼────────────────────────────────┤
36 ' │6) DataTool.findAndEdit(sql) │RecordSet │执行动态的数据库查询操作,游标允许双向移动,结果集可单条更新
37 ' ├─────────────────┼───────┼────────────────────────────────┤
38 ' │6) DataTool.findAndEditBatch(sql) │RecordSet │执行动态的数据库查询操作,游标允许双向移动,结果集可批量更新
39 ' ├─────────────────┼───────┼────────────────────────────────┤
40 ' │7) DataTool.execute(sql) │Boolean │执行更新操作,例如:Insert、Update、Delete等
41 ' ├─────────────────┼───────┼────────────────────────────────┤
42 ' │8) DataTool.getErr │String │返回错误描述信息
43 ' └─────────────────┴───────┴────────────────────────────────┘
44 '
45 ' ----------------------------------------------------------------------------------------------------------------------
46 '
47 ' 示例:
48 '
49 ' 1) 简单的检索数据:
50 '
51 ' Set rs = DataTool.find("select * from tableName")
52 ' If rs Is Nothing Then
53 ' MsgBox "SQL语句不正确,检索失败!"
54 ' Else
55 ' MsgBox rs("fieldName")
56 ' End If
57 '
58 ' find方法返回的RecordSet对象支持:MoveNext、MoveLast方法;但不支持:MovePrevious、MoveFirst、recordCount等方法
59 '
60 ' 2) 检索数据,并需要返回总记录数或反向移动游标:
61 '
62 ' Set rs = DataTool.findDynamic("select * from tableName")
63 ' If rs Is Nothing Then
64 ' MsgBox "SQL语句不正确,检索失败!"
65 ' Else
66 ' rs.MoveNext '下一条
67 ' rs.MovePrevious '上一条
68 ' rs.MoveLast '最后一条
69 ' rs.MoveFirst '第一条
70 ' MsgBox rs.RecordCount '总记录条数
71 ' End If
72 '
73 ' findDynamic方法返回的RecordSet对象支持:MoveNext、MoveLast、MovePrevious、MoveFirst、recordCount等方法
74 '
75 ' 3) 检索数据,并需要进行修改:
76 '
77 ' Set rs = DataTool.findAndEdit("select * from tableName")
78 ' If rs Is Nothing Then
79 ' MsgBox "SQL语句不正确,检索失败!"
80 ' Else
81 ' rs.AddNew
82 ' rs("fieldName") = "新数据"
83 ' rs.Update
84 ' End If
85 '
86 ' 4) 检索数据,并需要进行批量修改:
87 '
88 ' Set rs = DataTool.findAndEditBatch("select * from tableName")
89 ' If rs Is Nothing Then
90 ' MsgBox "SQL语句不正确,检索失败!"
91 ' Else
92 ' Do Until rs.Eof
93 ' rs("click") = rs("click") + 1
94 ' rs.MoveNext
95 ' Loop
96 ' rs.UpdateBatch
97 ' End If
98 '
99 ' 5) 执行SQL语句直接对数据库进行添加操作
100 '
101 ' DataTool.execute "insert into table values(1,'新记录')"
102 '
103 ' 6) 执行SQL语句直接对数据库进行修改操作
104 '
105 ' DataTool.execute "update table set fieldName='更新后的记录' where id=1"
106 '
107 ' 7) 执行SQL语句直接对数据库进行删除操作
108 '
109 ' DataTool.execute "delete from table where id=1"
110 '
111 ' ==============================================================================================================================
112
113 Dim conn As ADODB.Connection
114 Dim ErrDesc As String
115 Dim rs, rsad As ADODB.Recordset
116
117 ' 函数:打开数据库连接
118 ' 参数:无
119 ' 返回:Boolean 连接数据库成功:true;连接失败:false
120 Function dbOpen() As Boolean
121 If conn Is Nothing Then
122 Set conn = New ADODB.Connection
123 End If
124 If conn.State Then
125 ErrDesc = ""
126 dbOpen = True
127 Exit Function
128 End If
129 Dim DataBasePath, DataBaseName, DataBaseUid, DataBasePwd As String
130 Dim connStr As String
131 ' -----------------------------------------------------
132 DataBasePath = " 192.168.0.1 " ' 数据库服务器地址
133 DataBaseName = " myDb " ' 数据库名称
134 DataBaseUid = " sa " ' 登录名称
135 DataBasePwd = "" ' 登录密码
136 ' -----------------------------------------------------
137 connStr = " provider=SQLOLEDB;Data Source = " & DataBasePath & " ;database= " & DataBaseName & " ;uid= " & DataBaseUid & " ;pwd= " & DataBasePwd
138 conn.ConnectionTimeout = 3
139 On Error Resume Next
140 conn.Open connStr
141 If Err Then
142 ErrDesc = " 数据库连接失败! "
143 dbOpen = False
144 Else
145 ErrDesc = ""
146 dbOpen = True
147 End If
148 End Function
149
150 ' 函数:关闭数据库连接
151 ' 参数:无
152 ' 返回:无
153 Function dbClose()
154 If conn Is Nothing Then Exit Function
155 If conn.State = 0 Then Exit Function
156 conn.Close
157 Set conn = Nothing
158 End Function
159
160 ' 函数:执行查询(单向游标,只读)
161 ' 参数:strSql String 要执行的SQL字符串
162 ' 返回:RecordSet 或 Nothing(数据库连接失败、SQL语句有错误时)
163 Function find(ByVal strSql As String ) As ADODB.Recordset
164 If Not dbOpen Then Set find = Nothing : Exit Function
165 Dim rsTmp As ADODB.Recordset
166 On Error Resume Next
167 Set rsTmp = conn.execute(strSql)
168 If Err Then
169 ErrDesc = " 检索数据库时发生错误! "
170 Set find = Nothing
171 Else
172 ErrDesc = ""
173 Set find = rsTmp
174 End If
175 End Function
176
177 ' 函数:执行查询(动态游标,双向,只读)
178 ' 参数:strSql String 要执行的SQL字符串
179 ' 返回:RecordSet 或 Nothing(数据库连接失败、SQL语句有错误时)
180 Function findDynamic(ByVal strSql As String ) As ADODB.Recordset
181 If Not dbOpen Then Set findDynamic = Nothing : Exit Function
182 Dim rsTmp As New ADODB.Recordset
183 On Error Resume Next
184 rsTmp.Open strSql, conn, 2 , 1
185 If Err Then
186 ErrDesc = " 检索数据库时发生错误! "
187 Set findDynamic = Nothing
188 Else
189 ErrDesc = ""
190 Set findDynamic = rsTmp
191 End If
192 End Function
193
194 ' 函数:执行查询(静态游标,双向,只读)
195 ' 参数:strSql String 要执行的SQL字符串
196 ' 返回:RecordSet 或 Nothing(数据库连接失败、SQL语句有错误时)
197 Function findStatic(ByVal strSql As String ) As ADODB.Recordset
198 If Not dbOpen Then Set findStatic = Nothing : Exit Function
199 Dim rsTmp As New ADODB.Recordset
200 On Error Resume Next
201 rsTmp.Open strSql, conn, 3 , 1
202 If Err Then
203 ErrDesc = " 检索数据库时发生错误! "
204 Set findStatic = Nothing
205 Else
206 ErrDesc = ""
207 Set findStatic = rsTmp
208 End If
209 End Function
210
211 ' 函数:执行查询,并允许修改(动态游标,双向,可单条写入)
212 ' 参数:strSql String 要执行的SQL字符串
213 ' 返回:RecordSet 或 Nothing(数据库连接失败、SQL语句有错误时)
214 Function findAndEdit(ByVal strSql As String ) As ADODB.Recordset
215 If Not dbOpen Then Set findAndEdit = Nothing : Exit Function
216 Dim rsTmp As New ADODB.Recordset
217 On Error Resume Next
218 rsTmp.Open strSql, conn, 2 , 3
219 If Err Then
220 ErrDesc = " 检索数据库时发生错误! "
221 Set findAndEdit = Nothing
222 Else
223 ErrDesc = ""
224 Set findAndEdit = rsTmp
225 End If
226 End Function
227
228 ' 函数:执行查询,并允许修改(动态游标,双向,可批量写入)
229 ' 参数:strSql String 要执行的SQL字符串
230 ' 返回:RecordSet 或 Nothing(数据库连接失败、SQL语句有错误时)
231 Function findAndEditBatch(ByVal strSql As String ) As ADODB.Recordset
232 If Not dbOpen Then Set findAndEditBatch = Nothing : Exit Function
233 Dim rsTmp As New ADODB.Recordset
234 On Error Resume Next
235 rsTmp.Open strSql, conn, 2 , 4
236 If Err Then
237 ErrDesc = " 检索数据库时发生错误! "
238 Set findAndEditBatch = Nothing
239 Else
240 ErrDesc = ""
241 Set findAndEditBatch = rsTmp
242 End If
243 End Function
244
245 ' 函数:执行更新、删除及插入操作
246 ' 参数:strSql String 要执行的SQL字符串
247 ' 返回:Boolean 执行成功:true;执行失败:false
248 Function execute (ByVal strSql As String ) As Boolean
249 If Not dbOpen Then execute = False : Exit Function
250 On Error Resume Next
251 conn.execute strSql
252 If Err Then
253 ErrDesc = " 执行数据库更新时发生错误! "
254 execute = False
255 Else
256 ErrDesc = ""
257 execute = True
258 End If
259 End Function
260
261 ' 函数:返回错误描述信息
262 ' 参数:无
263 ' 返回:String
264 Function getErr()
265 getErr = ErrDesc
266 End Function
267
2 '
3 ' VB、ASP 数据库操作工具类 DataTool v1.0
4 '
5 ' @Author : 网无忌
6 ' @Email : netwild@163.com
7 ' @Blog : http://blog.itplus.com.cn
8 '
9 ' ----------------------------------------------------------------------------------------------------------------------
10 '
11 ' 说明:该工具类封装了对于数据库的常用操作
12 ' 包括:建立数据库连接、断开数据库连接、查询数据、执行更新四个部分
13 '
14 ' ----------------------------------------------------------------------------------------------------------------------
15 '
16 ' 方法:
17 '
18 ' ┌─────────────────┬───────┬────────────────────────────────┐
19 ' │ 方法名称 │返回值 │描述
20 ' ├─────────────────┼───────┼────────────────────────────────┤
21 ' │1) DataTool.dbOpen │Boolean │建立数据库连接。
22 ' │ │ │若当前连接已建立,则使用现有连接
23 ' │ │ │否则创建新的连接对象
24 ' ├─────────────────┼───────┼────────────────────────────────┤
25 ' │2) DataTool.dbClose │无 │关闭数据库连接。
26 ' │ │ │若当前连接已关闭,则直接返回;
27 ' │ │ │否则直接关闭连接,并销毁连接对象,释放内存
28 ' │ │ │※ 建议在窗体注销或页面结束时手动调用该方法,将连接销毁
29 ' ├─────────────────┼───────┼────────────────────────────────┤
30 ' │3) DataTool.find(sql) │RecordSet │执行简单的数据库查询操作,游标仅允许向前单向移动,结果集只读
31 ' ├─────────────────┼───────┼────────────────────────────────┤
32 ' │4) DataTool.findDynamic(sql) │RecordSet │执行动态的数据库查询操作,游标允许双向移动,结果集只读
33 ' ├─────────────────┼───────┼────────────────────────────────┤
34 ' │5) DataTool.findStatic(sql) │RecordSet │执行静态的数据库查询操作,游标允许双向移动,结果集只读
35 ' ├─────────────────┼───────┼────────────────────────────────┤
36 ' │6) DataTool.findAndEdit(sql) │RecordSet │执行动态的数据库查询操作,游标允许双向移动,结果集可单条更新
37 ' ├─────────────────┼───────┼────────────────────────────────┤
38 ' │6) DataTool.findAndEditBatch(sql) │RecordSet │执行动态的数据库查询操作,游标允许双向移动,结果集可批量更新
39 ' ├─────────────────┼───────┼────────────────────────────────┤
40 ' │7) DataTool.execute(sql) │Boolean │执行更新操作,例如:Insert、Update、Delete等
41 ' ├─────────────────┼───────┼────────────────────────────────┤
42 ' │8) DataTool.getErr │String │返回错误描述信息
43 ' └─────────────────┴───────┴────────────────────────────────┘
44 '
45 ' ----------------------------------------------------------------------------------------------------------------------
46 '
47 ' 示例:
48 '
49 ' 1) 简单的检索数据:
50 '
51 ' Set rs = DataTool.find("select * from tableName")
52 ' If rs Is Nothing Then
53 ' MsgBox "SQL语句不正确,检索失败!"
54 ' Else
55 ' MsgBox rs("fieldName")
56 ' End If
57 '
58 ' find方法返回的RecordSet对象支持:MoveNext、MoveLast方法;但不支持:MovePrevious、MoveFirst、recordCount等方法
59 '
60 ' 2) 检索数据,并需要返回总记录数或反向移动游标:
61 '
62 ' Set rs = DataTool.findDynamic("select * from tableName")
63 ' If rs Is Nothing Then
64 ' MsgBox "SQL语句不正确,检索失败!"
65 ' Else
66 ' rs.MoveNext '下一条
67 ' rs.MovePrevious '上一条
68 ' rs.MoveLast '最后一条
69 ' rs.MoveFirst '第一条
70 ' MsgBox rs.RecordCount '总记录条数
71 ' End If
72 '
73 ' findDynamic方法返回的RecordSet对象支持:MoveNext、MoveLast、MovePrevious、MoveFirst、recordCount等方法
74 '
75 ' 3) 检索数据,并需要进行修改:
76 '
77 ' Set rs = DataTool.findAndEdit("select * from tableName")
78 ' If rs Is Nothing Then
79 ' MsgBox "SQL语句不正确,检索失败!"
80 ' Else
81 ' rs.AddNew
82 ' rs("fieldName") = "新数据"
83 ' rs.Update
84 ' End If
85 '
86 ' 4) 检索数据,并需要进行批量修改:
87 '
88 ' Set rs = DataTool.findAndEditBatch("select * from tableName")
89 ' If rs Is Nothing Then
90 ' MsgBox "SQL语句不正确,检索失败!"
91 ' Else
92 ' Do Until rs.Eof
93 ' rs("click") = rs("click") + 1
94 ' rs.MoveNext
95 ' Loop
96 ' rs.UpdateBatch
97 ' End If
98 '
99 ' 5) 执行SQL语句直接对数据库进行添加操作
100 '
101 ' DataTool.execute "insert into table values(1,'新记录')"
102 '
103 ' 6) 执行SQL语句直接对数据库进行修改操作
104 '
105 ' DataTool.execute "update table set fieldName='更新后的记录' where id=1"
106 '
107 ' 7) 执行SQL语句直接对数据库进行删除操作
108 '
109 ' DataTool.execute "delete from table where id=1"
110 '
111 ' ==============================================================================================================================
112
113 Dim conn As ADODB.Connection
114 Dim ErrDesc As String
115 Dim rs, rsad As ADODB.Recordset
116
117 ' 函数:打开数据库连接
118 ' 参数:无
119 ' 返回:Boolean 连接数据库成功:true;连接失败:false
120 Function dbOpen() As Boolean
121 If conn Is Nothing Then
122 Set conn = New ADODB.Connection
123 End If
124 If conn.State Then
125 ErrDesc = ""
126 dbOpen = True
127 Exit Function
128 End If
129 Dim DataBasePath, DataBaseName, DataBaseUid, DataBasePwd As String
130 Dim connStr As String
131 ' -----------------------------------------------------
132 DataBasePath = " 192.168.0.1 " ' 数据库服务器地址
133 DataBaseName = " myDb " ' 数据库名称
134 DataBaseUid = " sa " ' 登录名称
135 DataBasePwd = "" ' 登录密码
136 ' -----------------------------------------------------
137 connStr = " provider=SQLOLEDB;Data Source = " & DataBasePath & " ;database= " & DataBaseName & " ;uid= " & DataBaseUid & " ;pwd= " & DataBasePwd
138 conn.ConnectionTimeout = 3
139 On Error Resume Next
140 conn.Open connStr
141 If Err Then
142 ErrDesc = " 数据库连接失败! "
143 dbOpen = False
144 Else
145 ErrDesc = ""
146 dbOpen = True
147 End If
148 End Function
149
150 ' 函数:关闭数据库连接
151 ' 参数:无
152 ' 返回:无
153 Function dbClose()
154 If conn Is Nothing Then Exit Function
155 If conn.State = 0 Then Exit Function
156 conn.Close
157 Set conn = Nothing
158 End Function
159
160 ' 函数:执行查询(单向游标,只读)
161 ' 参数:strSql String 要执行的SQL字符串
162 ' 返回:RecordSet 或 Nothing(数据库连接失败、SQL语句有错误时)
163 Function find(ByVal strSql As String ) As ADODB.Recordset
164 If Not dbOpen Then Set find = Nothing : Exit Function
165 Dim rsTmp As ADODB.Recordset
166 On Error Resume Next
167 Set rsTmp = conn.execute(strSql)
168 If Err Then
169 ErrDesc = " 检索数据库时发生错误! "
170 Set find = Nothing
171 Else
172 ErrDesc = ""
173 Set find = rsTmp
174 End If
175 End Function
176
177 ' 函数:执行查询(动态游标,双向,只读)
178 ' 参数:strSql String 要执行的SQL字符串
179 ' 返回:RecordSet 或 Nothing(数据库连接失败、SQL语句有错误时)
180 Function findDynamic(ByVal strSql As String ) As ADODB.Recordset
181 If Not dbOpen Then Set findDynamic = Nothing : Exit Function
182 Dim rsTmp As New ADODB.Recordset
183 On Error Resume Next
184 rsTmp.Open strSql, conn, 2 , 1
185 If Err Then
186 ErrDesc = " 检索数据库时发生错误! "
187 Set findDynamic = Nothing
188 Else
189 ErrDesc = ""
190 Set findDynamic = rsTmp
191 End If
192 End Function
193
194 ' 函数:执行查询(静态游标,双向,只读)
195 ' 参数:strSql String 要执行的SQL字符串
196 ' 返回:RecordSet 或 Nothing(数据库连接失败、SQL语句有错误时)
197 Function findStatic(ByVal strSql As String ) As ADODB.Recordset
198 If Not dbOpen Then Set findStatic = Nothing : Exit Function
199 Dim rsTmp As New ADODB.Recordset
200 On Error Resume Next
201 rsTmp.Open strSql, conn, 3 , 1
202 If Err Then
203 ErrDesc = " 检索数据库时发生错误! "
204 Set findStatic = Nothing
205 Else
206 ErrDesc = ""
207 Set findStatic = rsTmp
208 End If
209 End Function
210
211 ' 函数:执行查询,并允许修改(动态游标,双向,可单条写入)
212 ' 参数:strSql String 要执行的SQL字符串
213 ' 返回:RecordSet 或 Nothing(数据库连接失败、SQL语句有错误时)
214 Function findAndEdit(ByVal strSql As String ) As ADODB.Recordset
215 If Not dbOpen Then Set findAndEdit = Nothing : Exit Function
216 Dim rsTmp As New ADODB.Recordset
217 On Error Resume Next
218 rsTmp.Open strSql, conn, 2 , 3
219 If Err Then
220 ErrDesc = " 检索数据库时发生错误! "
221 Set findAndEdit = Nothing
222 Else
223 ErrDesc = ""
224 Set findAndEdit = rsTmp
225 End If
226 End Function
227
228 ' 函数:执行查询,并允许修改(动态游标,双向,可批量写入)
229 ' 参数:strSql String 要执行的SQL字符串
230 ' 返回:RecordSet 或 Nothing(数据库连接失败、SQL语句有错误时)
231 Function findAndEditBatch(ByVal strSql As String ) As ADODB.Recordset
232 If Not dbOpen Then Set findAndEditBatch = Nothing : Exit Function
233 Dim rsTmp As New ADODB.Recordset
234 On Error Resume Next
235 rsTmp.Open strSql, conn, 2 , 4
236 If Err Then
237 ErrDesc = " 检索数据库时发生错误! "
238 Set findAndEditBatch = Nothing
239 Else
240 ErrDesc = ""
241 Set findAndEditBatch = rsTmp
242 End If
243 End Function
244
245 ' 函数:执行更新、删除及插入操作
246 ' 参数:strSql String 要执行的SQL字符串
247 ' 返回:Boolean 执行成功:true;执行失败:false
248 Function execute (ByVal strSql As String ) As Boolean
249 If Not dbOpen Then execute = False : Exit Function
250 On Error Resume Next
251 conn.execute strSql
252 If Err Then
253 ErrDesc = " 执行数据库更新时发生错误! "
254 execute = False
255 Else
256 ErrDesc = ""
257 execute = True
258 End If
259 End Function
260
261 ' 函数:返回错误描述信息
262 ' 参数:无
263 ' 返回:String
264 Function getErr()
265 getErr = ErrDesc
266 End Function
267
宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒