VB6 SQL参数化查询模块
熟悉VB6的朋友在写带有多个参数的SQL语句的时候 ,查询脚本的参数是用&或+号连接起来吗,只有几个参数是尚可,当参数多时可读性就差多了。为了免去麻烦,因此做了此函数。
虽然ADD的Command对象有Parameters属性,但还是自己封装了带参数的查询方法,有部分参考了宁静兄的:
1 Public Function AdoOpenRS(ByRef wADORecordSet As ADODB.Recordset, _ 2 sqlSELECTCommand As String, _ 3 Optional Param As Variant = "", _ 4 Optional ActiveADOConn As ADODB.Connection = Nothing, _ 5 Optional ShowMsgBoxIfFail As Boolean = True, _ 6 Optional CloseRSIfFail As Boolean = True, _ 7 Optional SetRSNothingIfFail As Boolean = True, _ 8 Optional sRetErrDesp As String = "") As Boolean 9 10 'Param 參數數組 11 On Error GoTo errOpenRs 12 If Len(sqlSELECTCommand) = 0 Then Exit Function 13 14 15 If TypeName(Param) = "Variant()" Then 16 Dim i As Byte 17 For i = 1 To UBound(Param) 18 sqlSELECTCommand = Replace(sqlSELECTCommand, "?" & i, Param(i)) 19 Next 20 End If 21 22 wADORecordSet.CursorLocation = adUseClient '客户端游标 23 24 If ActiveADOConn Is Nothing Then 25 wADORecordSet.Open sqlSELECTCommand, SQLConn, adOpenDynamic, adLockOptimistic 26 Else 27 wADORecordSet.Open sqlSELECTCommand, ActiveADOConn, adOpenDynamic, adLockOptimistic 28 End If 29 30 Exit Function 31 errOpenRs: 32 If ShowMsgBoxIfFail Then MsgBox Err.Description, vbExclamation, "ErrOpenRs" 33 'If CloseRSIfFail Then wADORecordSet.Close 34 If SetRSNothingIfFail Then Set wADORecordSet = Nothing 35 End Function
调用例子:
1 Dim strsql As String 2 Dim Param(1 To 1) As Variant 3 Dim rs As ADODB.Recordset 4 Set rs = New ADODB.Recordset 5 6 strsql = "select OrderID From [Order] " & _ 7 " where convert(nvarchar(7),OrderDate,120) = '?1'" 8 Param(1) = Format(Now, "YYYY-MM") 9 10 AdoOpenRS rs, strsql, Param 11 12