创建参数化命令

每次通过 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 语句指定参数。