requêtes paramétrées en VBscript
Bonjour
j'implémente du nouveau code sur une grosse appli en ASP.
En attendant une migration probable vers ASP.Net, je cherche à introduire de la requête paramétrée un peu partout où je trouve des requêtes concaténées.
ma question concerne le passage de paramètres à un objet command, avec une commande de type texte (adCmdText)
mes questions :
1) au sein d'une même routine, est ce intelligent d'utiliser un seul objet command ? et donc de remplacer des paramètres au fur et à mesure des besoins, comme je le fais ci dessous.
Voici ci dessous un exemple de ce que j'ai pu écrire.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| function update_group (group_name,comments, group_id)
'if update fails because group_name already exists then it returns -1 if name already exists otherwise it returns 0
Dim SQL, RSO
dim SQLcmd
Set SQLcmd = Server.CreateObject("ADODB.Command")
Set SQLcmd.ActiveConnection = Conn
SQLcmd.CommandType = adCmdText
SQL= "select * from USERS_GROUPS where group_name = ? and group_id !=?"
with SQLcmd
.CommandText = SQL
.Prepared = true
.Parameters.Append .CreateParameter("@P1", adVarWChar,adParamInput,100, group_name)
.Parameters.Append .CreateParameter("@P2", adInteger,adParamInput,, group_id)
set RSO = .execute ()
end with
if (RSO.eof and RSO.bof) then
SQL ="update USERS_GROUPS set group_name=?, comments = ? where group_id=?"
with SQLcmd
.CommandText = SQL
.Prepared = true
.Parameters.delete "@P2" 'delete P2 to replace it with comment value
.Parameters.Append .CreateParameter("@P2", adVarWChar,adParamInput,500, comments)
.Parameters.Append .CreateParameter("@P3", adInteger,adParamInput,, group_id)
set RSO = .execute ()
end with
update_group = 0
else
update_group = -1
end if
Set SQLcmd = Nothing
end function |
2) avec les seuls points d'interrogations comme mécanisme de substitution des paramètres, il ne semble pas simple de réutiliser des paramètres dans des requêtes successives. L'usage explicite du nom des paramètres déclarés dans l'objet command suppose t'il de déclarer ces variables dans le contexte SQL ?
du genre :
Code:
1 2 3 4 5 6 7 8 9 10
| SQL= "declare @P1 int ; select * from USERS_GROUPS where group_name = ? and group_id !=@P1"
with SQLcmd
.CommandText = SQL
.Prepared = true
.Parameters.Append .CreateParameter("@P1", adVarWChar,adParamInput,100, group_name)
.Parameters.Append .CreateParameter("@P2", adInteger,adParamInput,, group_id)
set RSO = .execute ()
end with |
est ce la méthode à appliquer ? cela permettrait il de réutiliser un paramètre déjà déclaré au sein de l'objet command dans des requêtes successives ?
Merci d'avance pour vos avis éclairés :)