Sur la table de mise à jour, de déclencher une action dans mon .NET code
Je me demande si c'est possible. Nous voulons une fonction de travail dans notre .NET code lorsqu'une valeur dans une table spécifique est mis à jour. Ce pourrait être sur un record d'insertion ou de mise à jour. Est-ce possible?
Si non, est-il une alternative?
Pourquoi ne pas ajouter un Déclencheur sur la DB côté.. ? que serait ma première approche de cette façon, vous n'avez pas à faire tous les allers-retours à la DB, aussi s'il vous plaît être un peu plus élaboré avec votre question
DJ KRAZE approche n'est pas une bonne idée. Le code à exécuter tout de suite? Si non, vous pouvez éventuellement utiliser un déclencheur pour mettre à jour une certaine forme de mise en scène de la table, puis de créer un organisme indépendant d'application de la console qui va à l'encontre de la table pour vérifier que les modifications qui s'est passé et l'exécution de code spécifique contre il un prédéfini des heures programmées.
C'était notre première pensée. Cependant, c'est vers le bas pour les intervalles de temps nous avons mis en application. Cependant, nous ne devons exécuter exécuter le code tout de suite.
Quel type de .NET code? Un Service Windows en cours d'exécution sur le serveur de base de données? Un .NET de l'assemblée hébergé par SQL Server? Un WinForms une application qui s'exécute sur un PC? Quelque chose d'autre?
double possible de Catch/Soulever l'événement sur la table de mise à jour des données en C#
DJ KRAZE approche n'est pas une bonne idée. Le code à exécuter tout de suite? Si non, vous pouvez éventuellement utiliser un déclencheur pour mettre à jour une certaine forme de mise en scène de la table, puis de créer un organisme indépendant d'application de la console qui va à l'encontre de la table pour vérifier que les modifications qui s'est passé et l'exécution de code spécifique contre il un prédéfini des heures programmées.
C'était notre première pensée. Cependant, c'est vers le bas pour les intervalles de temps nous avons mis en application. Cependant, nous ne devons exécuter exécuter le code tout de suite.
Quel type de .NET code? Un Service Windows en cours d'exécution sur le serveur de base de données? Un .NET de l'assemblée hébergé par SQL Server? Un WinForms une application qui s'exécute sur un PC? Quelque chose d'autre?
double possible de Catch/Soulever l'événement sur la table de mise à jour des données en C#
OriginalL'auteur alwaysVBNET | 2013-08-19
Vous devez vous connecter pour publier un commentaire.
Vous devez vous poser quelques questions.
Voulez-vous de tout à rien de logique d'entreprise au niveau de db?
Évidemment une db déclencheur peut le faire (réaliser une action lorsqu'une valeur est modifiée, même si très spécifique de la valeur seulement).
J'ai vu certains systèmes db déclencher lourd. Leur "logique" réside profondément et fortement couplé avec la db de la plateforme. Il y a certains avantages, mais la plupart des gens seraient probablement dire que les inconvénients sont trop grands (de couplage, le manque de encapuslation/réutilisation).
En fonction de ce que vous faites et votre inspiration vous pouvez:
Assurez-vous que tous les DAO/BusinessFunctoin objets appelez votre "événement"
object.function
de faire ce que vous voulez, quand une certaine valeur, le changement se produit.Utiliser un déclencheur pour appeler votre événement
object.function
quand une certaine variation de la valeur du produit.Votre déclencheur n'est tout.
Personnellement, je pencherais vers l'Option 2 si vous avez un minimum de déclenchement (qui, tout simplement, les feux de l'événement de l'appel à votre
object.function
) afin de ne pas profondément couple de votre db à une logique d'entreprise.L'Option 1 est très bien, mais peut-être un peu de tracas, sauf si vous avez un petit ensemble de BF/DAO est que parler à cette table db.champ que vous souhaitez regarder.
L'Option 3 est à mon humble avis le pire choix que vous couple la logique de votre base de données et de réduire son accessibilité à votre couche de logique métier.
Étant donné que, voici quelques informations vers l'accomplissement de cette via les Options 2:
À l'aide de cet exemple, à partir de MSDN: http://msdn.microsoft.com/en-us/library/938d9dz2.aspx.
Cela montre comment avoir un déclencheur d'exécuter et d'appeler un objet CLR dans un projet.
De manière efficace, en votre projet, vous créez un déclencheur et l'avoir d'appel de votre classe.
Avis la ligne:
[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]
Ceci définit lorsque le code des incendies, puis dans le code, vous pouvez vérifier votre contrainte, puis le feu le reste de la méthode (ou pas), ou appeler une autre
object.method
en tant que de besoin.La principale différence entre aller directement à la base de données et l'ajout d'un déclencheur, c'est que cela vous donne accès à tous les objets de votre projet lors du déploiement.
Voici un exemple à partir de MSDN: msdn.microsoft.com/en-us/library/938d9dz2.aspx Effectivement, dans votre projet, vous créez un déclencheur et l'avoir d'appel de votre classe. Avis de la ligne:
[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]
Ceci définit lorsque le code des incendies, dans le code, vous pouvez vérifier votre contrainte, puis le feu le reste de la méthode ou pas, ou appeler un autre objet.la méthode en tant que de besoin. La différence entre aller directement à la base de données et l'ajout d'un déclencheur, c'est que cela vous donne accès à tous les objets de votre projet lors du déploiement.C'est très bon en fait, peut-être mieux que l'autre solution. Vous pourriez répondre à la question et je l'accepterais. Merci beaucoup
Et si j'ajoute qu'à ma réponse, sur laquelle ceci est un commentaire. 😉
Si vous voulais déclencher de code C# qui n'est pas déployé comme un
SQL Server Common Language Run-time Integration Project
mais se trouve sur une autre machine, vous devrez appeler votre code à distance (service web par exemple) à partir de l'intérieur de laSQL Server Common Language Run-time Integration Project
lorsque le tigrou qui se passe? Ou est-il une façon plus simple d'y parvenir?OriginalL'auteur williambq
Je n'ai jamais essayé, mais c'est possible. Vous pouvez écrire un assembly CLR et l'appeler à partir de votre tableau de déclenchement.
Vous pouvez voir un exemple ici.
Mais vous devriez poster votre problème et vous pouvez trouver un meilleur travail.
OriginalL'auteur Ehsan