OVH Cloud OVH Cloud

Problème procédure stockée et ASP

4 réponses
Avatar
philippe
Bonjour,
je n'arrive pas à exécuter une procédure stockée en ASP (timeout du serveur
sql)
alors que celle ci fonctionne parfaitement bien dans l'analyseur de
requetes.
la procédure :
===============
CREATE PROCEDURE SUPPRIME_VEHICULE @ID INT AS

DECLARE CHERCHE CURSOR FOR

SELECT TYPNatCode,TYPRecStatus,TYPMarket from TBL_TYPE where ID= @ID

OPEN CHERCHE

DECLARE @TYPNatCode int
DECLARE @TYPRECSTATUS int
DECLARE @TYPMARKET CHAR(2)

FETCH NEXT FROM CHERCHE INTO @TYPNATCODE,@TYPRECSTATUS,@TYPMARKET

-- je vire les equipements et options
DELETE TBL_ADDITION WHERE ADDNatCode=@TYPNATCODE AND
ADDRECSTATUS=@TYPRECSTATUS AND ADDMARKET=@TYPMARKET
-- je vire les prix
DELETE TBL_PRICE WHERE PRINatCode=@TYPNATCODE AND PRIRECSTATUS=@TYPRECSTATUS
AND PRIMARKET=@TYPMARKET
-- Je vire la remise
DELETE REMISEMAN WHERE REMI_IDD=@TYPNATCODE AND ADDMARKET=@TYPMARKET AND
TYPRECSTATUS=@TYPRECSTATUS
-- Je vire l'enregistrement de TBL_TYPE
CLOSE CHERCHE
DEALLOCATE CHERCHE
DELETE TBL_TYPE WHERE ID=@ID
GO
======================
l'appel de la procédure en asp :

Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = ConnE
cmd.CommandText = "SUPPRIME_VEHICULE"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("ID", adInteger, _
adParaminput)
cmd("ID") = Liste("ID")
cmd.Execute

c'est le dernier enregistrement qui n'est pas exécuté...
Si je le met en remarque, la procédure s'exécute sans aucun problème..
Si quelqu'un à une idée .. avant que je ne saute par la fenêtre...

--
Bon j'suis au RDC...

4 réponses

Avatar
Yanos El Guerilleros
philippe a écrit :
Bonjour,
je n'arrive pas à exécuter une procédure stockée en ASP (timeout du serveur
sql)
alors que celle ci fonctionne parfaitement bien dans l'analyseur de
requetes.
la procédure :
============== > CREATE PROCEDURE SUPPRIME_VEHICULE @ID INT AS

DECLARE CHERCHE CURSOR FOR

SELECT TYPNatCode,TYPRecStatus,TYPMarket from TBL_TYPE where ID= @ID

OPEN CHERCHE

DECLARE @TYPNatCode int
DECLARE @TYPRECSTATUS int
DECLARE @TYPMARKET CHAR(2)

FETCH NEXT FROM CHERCHE INTO @TYPNATCODE,@TYPRECSTATUS,@TYPMARKET

-- je vire les equipements et options
DELETE TBL_ADDITION WHERE ADDNatCode=@TYPNATCODE AND
ADDRECSTATUS=@TYPRECSTATUS AND ADDMARKET=@TYPMARKET
-- je vire les prix
DELETE TBL_PRICE WHERE PRINatCode=@TYPNATCODE AND PRIRECSTATUS=@TYPRECSTATUS
AND PRIMARKET=@TYPMARKET
-- Je vire la remise
DELETE REMISEMAN WHERE REMI_IDD=@TYPNATCODE AND ADDMARKET=@TYPMARKET AND
TYPRECSTATUS=@TYPRECSTATUS
-- Je vire l'enregistrement de TBL_TYPE
CLOSE CHERCHE
DEALLOCATE CHERCHE
DELETE TBL_TYPE WHERE ID=@ID
GO
===================== > l'appel de la procédure en asp :

Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = ConnE
cmd.CommandText = "SUPPRIME_VEHICULE"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("ID", adInteger, _
adParaminput)
cmd("ID") = Liste("ID")
cmd.Execute

c'est le dernier enregistrement qui n'est pas exécuté...
Si je le met en remarque, la procédure s'exécute sans aucun problème..
Si quelqu'un à une idée .. avant que je ne saute par la fenêtre...




Bonjour

Premièrement le vrai nom de ton paramètre est "@ID", ensuite il y a
toujours un premier paramètre qui correspond à la valeur de retour (mais
je ne me souviens jamais de son nom je crois que c'est @return_value
mais il faudrait vérifier.

Mais il y a plus simple :) C'est de demander la liste des paramètres
avec la commande

Cmd.Parameters.Refresh

Ca ajoute une interrogation au serveur, mais bon ca évite de se casser
la tête avec les paramètres input/ouput et tout le toutim

A++

--
Yanos

Gazzzzzzzzzz
Avatar
philippe
"Yanos El Guerilleros" a écrit dans le message
de news: > Bonjour

Premièrement le vrai nom de ton paramètre est "@ID", ensuite il y a
toujours un premier paramètre qui correspond à la valeur de retour (mais
je ne me souviens jamais de son nom je crois que c'est @return_value mais
il faudrait vérifier.



j'ai modifié mon appel avec le paramètre de retour
'L'appel de la procédure en ASP se fait par :
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = ConnE
cmd.CommandText = "SUPPRIME_VEHICULE"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Refresh
cmd.Parameters.Append cmd.CreateParameter("RetVal", adInteger,
adParamReturnValue)
cmd.Parameters.Append cmd.CreateParameter("@ID", adInteger,
adParaminput)
cmd("@ID") = Liste("ID")
'cmd.Parameters(0) = Liste("ID")
cmd.Execute
Si je vire le dernier DELETE dans la proc ca marche parfaitement ...
si je le remet... j'ai un timeout du serveur...
si je l'exécute dans SQL ... ca marche impecablement.


Gazzzzzzzzzz


t'as raison je devrais aller rouler.
Avatar
Yanos El Guerilleros
philippe a écrit :
"Yanos El Guerilleros" a écrit dans le message
de news: > Bonjour
Premièrement le vrai nom de ton paramètre est "@ID", ensuite il y a
toujours un premier paramètre qui correspond à la valeur de retour (mais
je ne me souviens jamais de son nom je crois que c'est @return_value mais
il faudrait vérifier.



j'ai modifié mon appel avec le paramètre de retour
'L'appel de la procédure en ASP se fait par :
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = ConnE
cmd.CommandText = "SUPPRIME_VEHICULE"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Refresh
cmd.Parameters.Append cmd.CreateParameter("RetVal", adInteger,
adParamReturnValue)
cmd.Parameters.Append cmd.CreateParameter("@ID", adInteger,
adParaminput)
cmd("@ID") = Liste("ID")
'cmd.Parameters(0) = Liste("ID")
cmd.Execute
Si je vire le dernier DELETE dans la proc ca marche parfaitement ...
si je le remet... j'ai un timeout du serveur...
si je l'exécute dans SQL ... ca marche impecablement.


Gazzzzzzzzzz


t'as raison je devrais aller rouler.





Hmmm bon tu utilises des curseurs dans ton cas tu n'en aurais pas
besoin, mais déjà place tout au début de ta procédure un

SET NOCOUNT ON

et tout à la fin un

SET NOCOUNT OFF

sinon il va générer un recordset par instruction, tu as 3 instructions
DELETE par ligne de ton curseur c'est peut-être à cause de ca que ca met
du temps.

Ensuite sans curseur tu peux faire une requête DELETE du genre

DELETE TBL_ADDITION
FROM TBL_ADDITION inner join TBL_TYPE on
ADDNatCode = TYPNatCode and
ADDRECSTATUS = TYPRECSTATUS AND
ADDMARKET = TYPMARKET
WHERE
TBL_TYPE.[ID]=@ID


A vérifier mais ca devrait fonctionner comme ca. Ca t'évite des curseurs
qui peuvent consommer beaucoup de ressources

--
Yanos

Gazzzzzzzzzz
Avatar
Med Bouchenafa
Je ferais un essai en augmentant le timeout pour cette commande
cmd.CommandTimeout `
Par defaut, la valeur est de 30 secondes

--
Bien cordialement
Med Bouchenafa

"philippe" a écrit dans le message de news:
442ce942$0$21021$
Bonjour,
je n'arrive pas à exécuter une procédure stockée en ASP (timeout du
serveur sql)
alors que celle ci fonctionne parfaitement bien dans l'analyseur de
requetes.
la procédure :
============== > CREATE PROCEDURE SUPPRIME_VEHICULE @ID INT AS

DECLARE CHERCHE CURSOR FOR

SELECT TYPNatCode,TYPRecStatus,TYPMarket from TBL_TYPE where ID= @ID

OPEN CHERCHE

DECLARE @TYPNatCode int
DECLARE @TYPRECSTATUS int
DECLARE @TYPMARKET CHAR(2)

FETCH NEXT FROM CHERCHE INTO @TYPNATCODE,@TYPRECSTATUS,@TYPMARKET

-- je vire les equipements et options
DELETE TBL_ADDITION WHERE ADDNatCode=@TYPNATCODE AND
ADDRECSTATUS=@TYPRECSTATUS AND ADDMARKET=@TYPMARKET
-- je vire les prix
DELETE TBL_PRICE WHERE PRINatCode=@TYPNATCODE AND
PRIRECSTATUS=@TYPRECSTATUS AND PRIMARKET=@TYPMARKET
-- Je vire la remise
DELETE REMISEMAN WHERE REMI_IDD=@TYPNATCODE AND ADDMARKET=@TYPMARKET AND
TYPRECSTATUS=@TYPRECSTATUS
-- Je vire l'enregistrement de TBL_TYPE
CLOSE CHERCHE
DEALLOCATE CHERCHE
DELETE TBL_TYPE WHERE ID=@ID
GO
===================== > l'appel de la procédure en asp :

Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = ConnE
cmd.CommandText = "SUPPRIME_VEHICULE"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("ID", adInteger, _
adParaminput)
cmd("ID") = Liste("ID")
cmd.Execute

c'est le dernier enregistrement qui n'est pas exécuté...
Si je le met en remarque, la procédure s'exécute sans aucun problème..
Si quelqu'un à une idée .. avant que je ne saute par la fenêtre...

--
Bon j'suis au RDC...