Récuperer une erreur SQL Server via Dataset typé
Bonjour,
J'utilise un Dataset Typé dont l'une des datatables est représentée par une requête composée de deux tables dans la base de données. Mon problème est que ma procedure stocké pour l'ajout, effectue 2 instructions INSERT (une pour chaque table). Mon problème est que je ne suis pas capable de récupérer une erreur qui survient dans la procédure stocké de façon convenable.
Présentement j'ai
Code:
1 2 3 4 5
|
INSERT INTO TABLE1 --Succès
INSERT INTO TABLE2 -- Erreur
IF @@ERROR > 0
RAISERROR('Erreur', 16, 1) |
Cette instruction ajoute dans la table 1, mais pas dans la table 2. Du coté du SQLDataAdapter, il n'y a pas d'erreur donc la transaction réussit (COMMIT)
J'ai essayé l'alternative suivante
Code:
1 2 3 4 5 6 7 8 9 10 11
|
BEGIN TRAN
INSERT INTO TABLE1 --Succès
INSERT INTO TABLE2 -- Erreur
IF @@ERROR > 0
ROLLBACK TRAN
ELSE
COMMIT TRAN |
Le problème ici est qu'étant donné que le SQLDataadapter demarre déjà une transaction, je me retrouve donc avec des transactions imbriquées.
Je ne veux pas toucher au mécanisme automatique des datasets mis à part le système d'évènement (ex. : RowUpdated)
Une solution du coté SQL server serait plus que bienvenue
Merci
DoOmX
Variables utilisées pour le traitement des erreurs
Puisque vous êtes dans une procédure stockée , je vous conseillerais de tester @@ERROR et de récupérer différentes valeurs liées à l'erreur.
Voir les liens suivants ( pour une fois , je les donne en français )
http://msdn.microsoft.com/fr-fr/libr...(SQL.105).aspx
http://msdn.microsoft.com/fr-fr/libr...(SQL.105).aspx
http://msdn.microsoft.com/fr-fr/libr...(SQL.105).aspx
si vous avez développé avec les classes de l'espace de nom System.Data.SqlClient, vous retrouverez facilement les équivalents de Class,ErrorCode,Line,Message,Server,Procedure,State de la classe SqlException