Trigger débutant

Résolu
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014 - 11 janv. 2012 à 09:05
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014 - 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

10 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2012 à 12:30
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
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2012 à 09:29
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
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
11 janv. 2012 à 10:17
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 ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2012 à 10:46
ca lève une exception, j'imagine...

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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
11 janv. 2012 à 11:30
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
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
11 janv. 2012 à 11:52
 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 !
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2012 à 12:32
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
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
11 janv. 2012 à 13:50
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é
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 janv. 2012 à 14:42
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
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
11 janv. 2012 à 14:53
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
0
Rejoignez-nous