OVH Cloud OVH Cloud

procedure stockée sql et gestion erreurs

2 réponses
Avatar
AD
Bonjour,
je developpe une application ou j'utilise une procedure stockée qui me
renvoie 0 ou 1 en fonction de la reussite ou non des insertions de ma
procédure stockée voici le code de la procédure stockée
Code:

CREATE PROCEDURE sp_test_transaction
AS

BEGIN TRANSACTION

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(1,'kjmlkl')
IF @@ERROR <> 0
BEGIN

RAISERROR('error occured while recording purchase', 16, 1)
ROLLBACK
RETURN 1
END
INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(2,'kjmlkl')
IF @@ERROR <> 0
BEGIN
ROLLBACK
RAISERROR('error occured while recording purchase', 16, 1)
RETURN 1
END
INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(6,'kjmlkl')
IF @@ERROR <> 0
BEGIN
ROLLBACK
RAISERROR('error occured while recording purchase', 16, 1)
RETURN 1
END

RETURN 0
COMMIT TRANSACTION
GO



si dans la transaction de ma procedure il ya un probleme la procedure est
cencé me renvoyer 1 sinon 0.
Dans ma page aspx j'effectue intentionnellement un test en provoquant une
erreur de violation de clé mais je souhaiterai juste recupérer le code de
retour de ma procedure c'est a dire 1 mais voici ce que le serveur me renvoie
:

Citation:
Violation de la contrainte PRIMARY KEY 'PK_DEGRE_URGENCE'. Impossible
d'insérer une clé en double dans l'objet 'DEGRE_URGENCE'.

et je souheterais récupérer dans une variable le chiffre du return de ma
procedure donc 1 a la place.

Je ne vois po comment faire merci d'avance pour votre aide !

2 réponses

Avatar
Ph. B.
AD wrote:
Bonjour,
je developpe une application ou j'utilise une procedure stockée qui me
renvoie 0 ou 1 en fonction de la reussite ou non des insertions de ma
procédure stockée voici le code de la procédure stockée
Code:

CREATE PROCEDURE sp_test_transaction
AS

BEGIN TRANSACTION

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(1,'kjmlkl')
IF @@ERROR <> 0
BEGIN

RAISERROR('error occured while recording purchase', 16, 1)
ROLLBACK
RETURN 1
END
INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(2,'kjmlkl')
IF @@ERROR <> 0
BEGIN
ROLLBACK
RAISERROR('error occured while recording purchase', 16, 1)
RETURN 1
END
INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(6,'kjmlkl')
IF @@ERROR <> 0
BEGIN
ROLLBACK
RAISERROR('error occured while recording purchase', 16, 1)
RETURN 1
END

RETURN 0
COMMIT TRANSACTION
GO



si dans la transaction de ma procedure il ya un probleme la procedure est
cencé me renvoyer 1 sinon 0.
Dans ma page aspx j'effectue intentionnellement un test en provoquant une
erreur de violation de clé mais je souhaiterai juste recupérer le code de
retour de ma procedure c'est a dire 1 mais voici ce que le serveur me renvoie
:

Citation:
Violation de la contrainte PRIMARY KEY 'PK_DEGRE_URGENCE'. Impossible
d'insérer une clé en double dans l'objet 'DEGRE_URGENCE'.

et je souheterais récupérer dans une variable le chiffre du return de ma
procedure donc 1 a la place.

Je ne vois po comment faire merci d'avance pour votre aide !



Bonjour

1°) Si tu déclenches une exception, le reste du code sera ignorée...
2°) Si tu renvoies 0 l'instruction COMMIT sera ignorée...

Tu devrais plutot écrire:

CREATE PROCEDURE sp_test_transaction
AS

BEGIN TRANSACTION

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(1,'kjmlkl')
IF @@ERROR <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN 1
END

COMMIT TRANSACTION
RETURN 0

Après tu peux choisir un codification de tes retours sur erreur pour savoir
comment les reprendre ultérieurement...

--
Philippe.
Avatar
Pascal Soveaux
"AD" wrote in message
news:
Bonjour,
je developpe une application ou j'utilise une procedure stockée qui me
renvoie 0 ou 1 en fonction de la reussite ou non des insertions de ma
procédure stockée voici le code de la procédure stockée
Code:

CREATE PROCEDURE sp_test_transaction
AS

BEGIN TRANSACTION

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(1,'kjmlkl')
IF @@ERROR <> 0
BEGIN

RAISERROR('error occured while recording purchase', 16, 1)
ROLLBACK
RETURN 1
END
INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(2,'kjmlkl')
IF @@ERROR <> 0
BEGIN
ROLLBACK
RAISERROR('error occured while recording purchase', 16, 1)
RETURN 1
END
INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(6,'kjmlkl')
IF @@ERROR <> 0
BEGIN
ROLLBACK
RAISERROR('error occured while recording purchase', 16, 1)
RETURN 1
END

RETURN 0
COMMIT TRANSACTION
GO



si dans la transaction de ma procedure il ya un probleme la procedure est
cencé me renvoyer 1 sinon 0.
Dans ma page aspx j'effectue intentionnellement un test en provoquant une
erreur de violation de clé mais je souhaiterai juste recupérer le code de
retour de ma procedure c'est a dire 1 mais voici ce que le serveur me
renvoie
:

Citation:
Violation de la contrainte PRIMARY KEY 'PK_DEGRE_URGENCE'. Impossible
d'insérer une clé en double dans l'objet 'DEGRE_URGENCE'.

et je souheterais récupérer dans une variable le chiffre du return de ma
procedure donc 1 a la place.

Je ne vois po comment faire merci d'avance pour votre aide !


<...>
SqlCommand cmd = new SqlCommand("sp_test_transaction ", Connection);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = cmd.Parameters.Add("@return", null);
param.Direction = ParameterDirection.ReturnValue;
<...>

Pascal