建立引數化命令

每次通過 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 語句指定引數。