创建参数化命令
每次通过 ADO 连接执行的 SQL 都需要包含用户输入时,最好将其参数化以最大限度地减少 SQL 注入的可能性。此方法比长串联更具可读性,并且有助于更强大和可维护的代码(即通过使用返回 Parameter
数组的函数)。
在标准 ODBC 语法中,参数在查询文本中被赋予 ?
占位符,然后参数将按照它们在查询中出现的顺序附加到 Command
。
请注意,下面的示例使用了 连接到数据源中的 OpenDatabaseConnection
函数以简化操作。
Public Sub UpdateTheFoos()
On Error GoTo Handler
Dim database As ADODB.Connection
Set database = OpenDatabaseConnection(SomeDSN)
If Not database Is Nothing Then
Dim update As ADODB.Command
Set update = New ADODB.Command
'Build the command to pass to the data source.
With update
.ActiveConnection = database
.CommandText = "UPDATE Table SET Foo = ? WHERE Bar = ?"
.CommandType = adCmdText
'Create the parameters.
Dim fooValue As ADODB.Parameter
Set fooValue = .CreateParameter("FooValue", adNumeric, adParamInput)
fooValue.Value = 42
Dim condition As ADODB.Parameter
Set condition = .CreateParameter("Condition", adBSTR, adParamInput)
condition.Value = "Bar"
'Add the parameters to the Command
.Parameters.Append fooValue
.Parameters.Append condition
.Execute
End With
End If
CleanExit:
If Not database Is Nothing And database.State = adStateOpen Then
database.Close
End If
Exit Sub
Handler:
Debug.Print "Error " & Err.Number & ": " & Err.Description
Resume CleanExit
End Sub
注意:上面的示例演示了参数化的 UPDATE 语句,但可以为任何 SQL 语句指定参数。