Переменные связывания для операторов SQL ADODB Oracle
Я безуспешно пытался найти действительно простой пример. Я близко, но что-то все еще не так. Я хочу использовать переменные связывания в программе VB, которую я пишу. Я получаю пропущенное выражение оракула, если использую @ для своих переменных связывания. Если я использую & для них, я получаю не все переменные связаны
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim cmd As ADODB.Command
Dim par As ADODB.Parameter
Dim test As String
Dim plcynbr As String
Dim sSQL As String
Dim lngLenName As String
lngsize = 50
lngLenName = "'bozo test'"
sSQL = "UPDATE MyTable SET ID_Name = @theName WHERE ID = @id"
dbConnectStr = "Provider=msdaora;Data Source=P1ltcent;User ID=userid;Password=password"
cnt.ConnectionString = dbConnectStr
cnt.Open dbConnectStr
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = cnt
.CommandType = adCmdText
.CommandText = sSQL
Set par = .CreateParameter("@theName", adVarChar, adParamInput, lngsize, lngLenName)
.Parameters.Append par
Set par = .CreateParameter("@id", adInteger, adParamInput, , 1)
.Parameters.Append par
For Each prm In .Parameters
Debug.Print prm.Name & " : " & prm.Value
Next
Debug.Print cmd.CommandText
.Execute , , adCmdText And adExecuteNoRecords
End With
Итак, я отобразил свои параметры, и они выглядят хорошо для меня &theName: 'bozo test' &id: 1
Я показал свой SQL, и он выглядит хорошо для меня
ОБНОВЛЕНИЕ MyTable SET ID_Name = &theName WHERE ID = &id
но я все еще получаю не все переменные привязаны
2 ответа
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim cmd As ADODB.Command
Dim par As ADODB.Parameter
Dim test As String
Dim plcynbr As String
Dim sSQL As String
Dim lngLenName As String
lngsize = 50
lngLenName = "bozo test"
sSQL = "UPDATE MyTable SET ID_Name = ? WHERE ID = ?"
dbConnectStr = "Provider=msdaora;Data Source=P1ltcent;User ID=userid;Password=password"
cnt.ConnectionString = dbConnectStr
cnt.Open dbConnectStr
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = cnt
.CommandType = adCmdText
.CommandText = sSQL
Set par = .CreateParameter("param1", adChar, adParamInput, lngsize, lngLenName)
.Parameters.Append par
Set par = .CreateParameter("param2", adInteger, adParamInput, , 1)
.Parameters.Append par
For Each prm In .Parameters
Debug.Print prm.Name & " : " & prm.Value
Next
Debug.Print cmd.CommandText
.Execute , , adCmdText And adExecuteNoRecords
End With
Переменные связывания в oracle обычно начинаются с:
:my-bind-var
Посмотрите здесь для аналогичного обсуждения: http://www.vbforums.com/showthread.php?681536-RESOLVED-bind-variables-against-Oracle-%28ADODB-ORACLE-BIND-PARAMETER-QUERY%29
По сути, вам нужно что-то подобное в вашем коде
sSQL = "UPDATE MyTable SET ID_Name = :theName WHERE ID = :id"
... затем связать их (без двоеточия) ...
Set par = .CreateParameter("theName", adVarChar, adParamInput, lngsize, lngLenName)