Comment puis-je associer des Paramètres pour les objets de Commande dans ADO avec VBScript?
J'ai été une ADO VBScript qui a besoin pour accepter les paramètres et d'intégrer ces paramètres dans la chaîne de Requête qui est envoyée à la base de données. Je continue à recevoir des erreurs lors de l'Enregistrement de l'Objet du Jeu tente de l'ouvrir. Si je passe une requête sans paramètres, le jeu d'enregistrements s'ouvre et je peux travailler avec les données. Quand je lance le script par le biais d'un débogueur, l'objet de commande n'indique pas une valeur pour le paramètre de l'objet. Il me semble que je suis absent quelque chose qui associe l'objet de Commande et les paramètres de l'objet, mais je ne sais pas quoi. Ici c'est un peu du Code VBScript:
...
'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
La chaîne SQL que j'utilise est assez standard, sauf que je veux passer un paramètre. C'est quelque chose comme ceci:
SELECT column1
FROM table1
WHERE column1 IS LIKE ?
Je comprends que l'ADO doit remplacer le "?" avec la valeur de paramètre-je attribuer dans le script. Le problème que je vois c'est que l'objet Paramètre indique la valeur correcte, mais la commande de l'objet champ de paramètre est null, selon mon débogueur.
OriginalL'auteur Krashman5k | 2010-04-01
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est vieux, mais pour ceux qui sont encore en fiding cela (comme je l'ai fait via google):
Si vous êtes à l'aide de Procédures Stockées:
Si non, je crois que vous changer la .CommandText pour votre instruction SQL avec des points d'interrogation à la place et vos Paramètres doivent suivre le même ordre.
Voir http://www.devguru.com/technologies/ado/quickref/command_createparameter.html
Pour une analyse de ce que les valeurs que vous passez avec CreateParameter, ainsi que une liste de types et de leurs descriptions.
OriginalL'auteur Bradley
Je n'ai jamais eu
CreateParameter
faire ce que je voulais. Bon paramétrage est une nécessité pour éviter les injection SQL, maisCreateParameter
est un pain PITA. Heureusement, il existe une alternative:Command.Execute
prend en paramètre directement.C'est beaucoup plus agréable quand enveloppé dans une bonne abstraction. J'ai écrit ma propre base de données classe d'emballage
ADODB.Connection
je ne voudrais pas avoir à faire tout cela manuellement. Il s'appuie un peu sur les autres classes personnalisées, mais l'essentiel, il devrait être évident:Parameters
argument.Execute
prend unVariant
. Vous obtiendrez de très obscure messages d'erreur si le nombre et les formats de vos paramètres ne correspondent pas à ce que la requête attend!OriginalL'auteur Thom Smith
Après la création du paramètre, vous devez l'ajouter à la Commande de l'objet de collection de Paramètres avant d'exécuter la Commande:
Vous pouvez aussi avoir besoin de spécifier le
Type
etSize
propriétés du Paramètre. Généralement, j'utilise les arguments de la fonction CreateParameter afin de définir toutes les propriétés nécessaires en une seule ligne:OriginalL'auteur Cheran Shunmugavel