명령 개체 매개 변수
이전 항목에서는 간단한 명령 만들고 실행하는대해 설명했습니다. SQL 명령이 매개 변수화된 다음 예제에서는 Command 개체에 더 흥미로운 사용을 보여 줄 수 있습니다. 이렇게 수정하면 매번 매개 변수에 다른 값을 전달하여 명령을 다시 사용할 수 있습니다. Command 개체의 Prepared 속성 속성이 true 설정되었으므로 ADO에서는 처음으로 실행하기 전에 공급자가 CommandText 지정된 명령을 컴파일해야 합니다. 또한 컴파일된 명령을 메모리에 유지합니다. 이렇게 하면 준비에 필요한 오버헤드로 인해 처음 실행될 때 명령 실행 속도가 약간 느려지지만, 이후 명령이 호출될 때마다 성능이 향상됩니다. 따라서 명령이 두 번 이상 사용되는 경우에만 준비해야 합니다.
'BeginManualParamCmd
Public Sub ManualParamCmd
On Error GoTo ErrHandler:
Dim objConn As New ADODB.Connection
Dim objCmd As New ADODB.Command
Dim objParm1 As New ADODB.Parameter
Dim objRs As New ADODB.Recordset
' Set the CommandText as a parameterized SQL query.
objCmd.CommandText = "SELECT OrderID, OrderDate, " & _
"RequiredDate, ShippedDate " & _
"FROM Orders " & _
"WHERE CustomerID = ? " & _
"ORDER BY OrderID"
objCmd.CommandType = adCmdText
' Prepare command because we will be executing it more than once.
objCmd.Prepared = True
' Create new parameter for CustomerID. Initial value is ALFKI.
Set objParm1 = objCmd.CreateParameter("CustId", adChar, _
adParamInput, 5, "ALFKI")
objCmd.Parameters.Append objParm1
' Connect to the data source.
Set objConn = GetNewConnection
objCmd.ActiveConnection = objConn
' Execute once and display.
Set objRs = objCmd.Execute
Debug.Print objParm1.Value
Do While Not objRs.EOF
Debug.Print vbTab & objRs(0) & vbTab & objRs(1) & vbTab & _
objRs(2) & vbTab & objRs(3)
objRs.MoveNext
Loop
' .Set new param value, re-execute command, and display.
objCmd("CustId") = "CACTU"
Set objRs = objCmd.Execute
Debug.Print objParm1.Value
Do While Not objRs.EOF
Debug.Print vbTab & objRs(0) & vbTab & objRs(1) & vbTab & _
objRs(2) & vbTab & objRs(3)
objRs.MoveNext
Loop
'clean up
objRs.Close
objConn.Close
Set objRs = Nothing
Set objConn = Nothing
Set objCmd = Nothing
Set objParm1 = Nothing
Exit Sub
ErrHandler:
'clean up
If objRs.State = adStateOpen Then
objRs.Close
End If
If objConn.State = adStateOpen Then
objConn.Close
End If
Set objRs = Nothing
Set objConn = Nothing
Set objCmd = Nothing
Set objParm1 = Nothing
If Err <> 0 Then
MsgBox Err.Source & "-->" & Err.Description, , "Error"
End If
'EndManualParamCmd
End Sub
'BeginNewConnection
Private Function GetNewConnection() As ADODB.Connection
Dim oCn As New ADODB.Connection
Dim sCnStr As String
sCnStr = "Provider='SQLOLEDB';Data Source='MySqlServer';" & _
"Integrated Security='SSPI';Initial Catalog='Northwind';"
oCn.Open sCnStr
If oCn.State = adStateOpen Then
Set GetNewConnection = oCn
End If
End Function
'EndNewConnection
모든 공급자가 준비된 명령을 지원하지는 않습니다. 공급자가 명령 준비를 지원하지 않는 경우 이 속성이 true 설정되는 즉시 오류를 반환할 수 있습니다. 오류를 반환하지 않으면, 명령 준비 요청을 무시하고 Prepared 속성을 false로 설정합니다.