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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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