Ich habe ein ADO-VBScript bearbeitet, das Parameter akzeptieren muss und diese Parameter in die Query-Zeichenfolge aufnehmen muss, die an die Datenbank übergeben wird. Ich bekomme immer wieder Fehler, wenn das Record Set Object versucht zu öffnen. Wenn ich eine Abfrage ohne Parameter übergebe, wird das Recordset geöffnet und ich kann mit den Daten arbeiten. Wenn ich das Skript über einen Debugger ausführe, zeigt das Befehlsobjekt keinen Wert für das Parameterobjekt an. Mir scheint, dass mir etwas fehlt, das das Command-Objekt und das Parameter-Objekt assoziiert, aber ich weiß nicht, was. Hier ist ein wenig von dem VBScript-Code:Wie verknüpfe ich Command-Objekte in ADO mit VBScript mit Parametern?
...
'Open Text file to collect SQL query string'
Set fso = CreateObject("Scripting.FileSystemObject")
fileName = "C:\SQLFUN\Limits_ADO.sql"
Set tso = fso.OpenTextFile(fileName, FORREADING)
SQL = tso.ReadAll
'Create ADO instance'
connString = "DRIVER={SQL Server};SERVER=myserver;UID=MyName;PWD=notapassword; Database=favoriteDB"
Set connection = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
connection.Open connString
cmd.ActiveConnection = connection
cmd.CommandText = SQL
cmd.CommandType = adCmdText
Set paramTotals = cmd.CreateParameter
With paramTotals
.value = "tot%"
.Name = "Param1"
End With
'The error occurs on the next line'
Set recordset = cmd.Execute
If recordset.EOF then
WScript.Echo "No Data Returned"
Else
Do Until recordset.EOF
WScript.Echo recordset.Fields.Item(0) ' & vbTab & recordset.Fields.Item(1)
recordset.MoveNext
Loop
End If
Die SQL-Zeichenfolge, die ich benutze ist ziemlich Standard, außer ich einen Parameter zu übergeben will. Es ist so etwas wie dieses: „?“
SELECT column1
FROM table1
WHERE column1 IS LIKE ?
Ich verstehe, dass ADO die ersetzen soll mit dem Parameterwert, den ich im Skript zugewiesen habe. Das Problem, das ich sehe, ist, dass das Parameter-Objekt den richtigen Wert zeigt, aber das Parameterfeld des Befehlsobjekts ist laut meinem Debugger null.
Das hat für mich funktioniert --- danke! Leser beachten Sie bitte: das 'Parameters' Argument zu' .Execute' nimmt eine 'Variante'. Sie werden sehr obskure Fehlermeldungen erhalten, wenn die Anzahl und Formate Ihrer Parameter nicht mit den Erwartungen der Abfrage übereinstimmen! – cxw