Trigger débutant [Résolu]

Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 11 janv. 2012 à 09:05 - Dernière réponse : Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention
- 11 janv. 2012 à 14:53
Bonjour,

NE savant pas utiliser Trigger, je me tourne vers Codes Sources afin d'obtenir des conseils. (J'ai posté sur SQLFR mais je ne pense pas que ce soit finalement approprié)

Si je comprends bien, mon trigger va permettre de vérifier des conditions avant la modification d'une table de ma BDD. Le trigger pourra aussi exécuter du code selon le résultat renvoyé par ce même trigger. Arrêtez moi si je me trompe !

Dans un trigger on peut mettre des paramètres. "@nom et @prenom" dans mon exemple.

Ce que je souhaite faire : Quand via mon appli en VB.NET j'ajouter un utilisateur dans la table ENTITE, je souhaiterais que le trigger detecte le nom et le prénom saisi dans l'appli, afin qu'il vérifie si cette combinaison nom/prénom n'est pas déjà présente dans ma table.

Ainsi je pensais faire comme celà :

CREATE TRIGGER Trigger1
DECLARE @Nom varchar(50),
@Prenom varchar(50)
ON dbo.ENTITE 
FOR INSERT
as
IF SELECT nom, prenom from ENTITE WHERE nom=@Nom and prenom =@ 


Je voudrais savoir si ce serai une bonne solution, et je ne trouve pas comment continuer ma requête. "Si ma requête renvoie Vrai alors... Sinon exécuter l'insert"

Mon deuxième problème est : Comment, a partir de mon code en VB, exécuter ma requête en renseignant les paramètres pour le trigger, et surtout, exécuter le trigger !

Cordialement
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 11 janv. 2012 à 12:30
3
Merci
1 - risque d'injection SQL
2 - pas besoin de faire un SELECT nom, prenom, faire un SELECT COUNT(0)
3 - Pourquoi tester "0" et non un numérique ?
4 - Pourquoi faire ton .Close a cet endroit ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de Renfield
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 11 janv. 2012 à 09:29
0
Merci
Pourquoi vouloir forcément passer par un Trigger ?
N'est-ce pas plus simple de faire une requete... et de faire ton Insert si ton gus n'existe pas deja ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 11 janv. 2012 à 10:17
0
Merci
Bonne remarque, mais c'était aussi pour essayer d'apprendre quelque chose de nouveau.

Je ne vois pas comment faire...

Peut être dans un premier temps faire une requete SELECT avec le nom et le prénom,
et apres je fais une condition

If MaCommande.ExecuteScalar <> 1 then
         Dim InsertUser as new SqlCommand "INSERT INTO.....................",Maconnexion
ELSE
messagebox.Show("ERREUR............")


Quelque chose comme ça ?
Commenter la réponse de Moundir76
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 11 janv. 2012 à 10:46
0
Merci
ca lève une exception, j'imagine...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 11 janv. 2012 à 11:30
0
Merci
Je fais comme celà :

   MaConnexion.Open()
                Dim CmdVerif As New SqlCommand("SELECT nom, prenom FROM ENTITE Where nom='" & Trim(txtNom.Text) & "' AND prenom='" & Trim(txtPrenom.Text) & "'", MaConnexion)

                If CmdVerif.ExecuteScalar <> 0 Then
                   'c'est que l'utilisateur existe déjà
                Else
                    'il n'existe pas
                End If
               

                MaConnexion.Close()


Ça a l'air de fonctionner
Commenter la réponse de Moundir76
Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 11 janv. 2012 à 11:52
0
Merci
 MaConnexion.Open()
                Dim CmdVerif As New SqlCommand("SELECT nom, prenom FROM ENTITE Where nom='" & Trim(txtNom.Text) & "' AND prenom='" & Trim(txtPrenom.Text) & "'", MaConnexion)
                Dim varID As String = CmdVerif.ExecuteScalar().ToString
                If varID <> "0" Then
                    MaConnexion.Close()
                    MessageBox.Show("Attention, cet utilisateur " & txtPrenom.Text & "   " & txtNom.Text & ", existe déjà ! Modifier son nom ou prénom (ex : " & txtNom.Text & "2)")
                Else


Ça fait un peu bidoullage mais ça fonctionne bien !
Commenter la réponse de Moundir76
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 11 janv. 2012 à 12:32
0
Merci
Mieux de faire :

If CmdVerif.ExecuteNonQuery("INSERT ....") = 0 Then
   // Aucune ligne insérée
   MessageBox.Show("...")
End If


cf cette page


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 11 janv. 2012 à 13:50
0
Merci
Merci pour le lien et les remarques, mais j'en reste au même souci, je veux vérifier une condition avant d'effectuer une insertion. Donc dans tous les cas je vais devoir faire un

SELECT COUNT(0) FROM ENTITE WHERE nom='" & txtNom.text & "' AND prenom='" & txtprenom.text &"' ....

Donc c'est sur, il y a un risque d'injection...

Mais merci pour l'astuce du count, je n'y avais pas pensé
Commenter la réponse de Moundir76
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 11 janv. 2012 à 14:42
0
Merci
vérifier une condtion avant le INSERT ?
fais confiance en ton Trigger et teste le nombre renvoyé par ExecuteNonQuery (nombre de lignes impactées)

si tu as 0, tu sais que ton Trigger a interdit l'insertion

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 11 janv. 2012 à 14:53
0
Merci
Sauf que mon souci est que je n'arrive pas a créer mon trigger, et encore moins l'utiliser... C'est pour ça que j'avais posté. Donc si quelqu'un peut m'aidé par rapport à mon premier message, je suis intéressé, sinon je vais faire avec du SQL comme actuellement.

Merci Renfield
Commenter la réponse de Moundir76

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.