IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Trigger et traitement client !


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut Trigger et traitement client !
    Bonjour à tous,

    Je voudrais pour renforcer l'intégrité de mes données, utiliser des triggers ... Mais je voudrais aussi pouvoir traiter l'échec d'une insertion dans mon client .NET, le problème étant que du côté client je ne puisse récupérer qu'une SQLException (et une class d'erreur), alors connaitriez vous une méthode permettant cette utilisation ?

    J'ai pensé (mais je pense aussi que c'est un peu mal, un peu brico) dans le message d'erreur renvoyer dans mon trigger grâce à RAISERROR, mettre un code d'erreur (au lieu du message) et faire le traitement adéquat selon ce code ...

    Sinon l'alternative serait d'utiliser une procédure stocké appelé en vérification avant l'insertion ...

    Pour explication : mon besoin est de vérifier que la création d'un article n'est pas susceptible de générer dans l'immédiat ou dans le future un doublant d'URL ...

    Merci d'avance pour votre aide
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Vous pouvez effectivement retourner une erreur avec RAISERROR, en spécifiant vos propres messages, ou un identifiant d'un message d'erreur.

    Vous pouvez ajouter vos propres messages d'erreur avec la procédure stockée système sp_addmessage

    Le texte de l'erreur est paramétrable à la volée, comme en C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RAISERROR('l'article %s n'existe pas !', 16, 1, @nomArticle)
    @++

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,

    Vous pouvez effectivement retourner une erreur avec RAISERROR, en spécifiant vos propres messages, ou un identifiant d'un message d'erreur.

    Vous pouvez ajouter vos propres messages d'erreur avec la procédure stockée système sp_addmessage

    Le texte de l'erreur est paramétrable à la volée, comme en C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RAISERROR('l'article %s n'existe pas !', 16, 1, @nomArticle)
    @++
    le problème est que cette vérification ne me satisfait pas totalement dans le sens où le seul critère discriminant avec une SqlException classique est le message d'erreur ... Je voudrais quand c'est une erreur générer par le trigger à l'aide de raiserror, afficher un message disant qu'il y a violation de contrainte et pour les autres exceptions un message applicatif générique ...

    (si je pouvais envoyer le n° d'erreur que je veux à la place du message ça m'aurai mieux convenu )

    Merci pour votre aide !
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    si je pouvais envoyer le n° d'erreur que je veux à la place du message ça m'aurai mieux convenu
    Ça irait pas ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE @ERROR_NUMBER INT SET @ERROR_NUMBER = ERROR_NUMBER()
    RAISERROR('%d', 16, 1, @ERROR_NUMBER)
    Cela ne fonctionne qu'en 2005.
    Si vous êtes sous 2000, faites la même chose avec @@ERROR ...

    @++

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    Pour explication : mon besoin est de vérifier que la création d'un article n'est pas susceptible de générer dans l'immédiat ou dans le future un doublant d'URL ...
    et pourquoi ne pas faire cela par une simple contraintes d'unicité ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    et pourquoi ne pas faire cela par une simple contraintes d'unicité ?

    A +
    merci pour votre réponse

    C'était la solution idéale si ... Il n y avait un paramètre qui change la donne, malheureusement je ne dois vérifier qu'une partie de l'url, car il y a un super utilisateur qui crée des url ...

    donc ça donne

    createur/suiteUrl

    Dans le cas ou c'est le super utilisateur c'est prefix/suiUrl ...

    Donc je dois vérifier l'unicité de suiteUrl ... Je suis pas très satisfait de la modélisation qui a été faite, mais bon ...
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

Discussions similaires

  1. [MySQL] Traitement Serveur et temporisation Client
    Par Atomicfryer dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/02/2009, 09h57
  2. Afficher un div pendant un traitement client javascript
    Par predalpha dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 15/10/2008, 11h58
  3. [trigger] annulation du traitement
    Par kase74 dans le forum WinDev
    Réponses: 5
    Dernier message: 02/11/2007, 12h12
  4. Réponses: 1
    Dernier message: 26/04/2007, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo