Meilleur auteur de réponses
(Visual Studio 2008 SQL Express) Impossible d'activer les contraintes… ?

Question
-
Bonjour,
J'ai deux boutons, qui lancent chacun une procédure stockée
L'un : sp_helpdb
L'autre : sp_helpfile
Et j'affiche le résultat dans un DataGridView
A l'exécution, c'est curieux !
Je lance sp_helpdb OK, j'affiche le résulat
Je lance ensuite le sp_helpfile, OK, j'affiche le résulat
Je relance le sp_helpdb, et là, j'ai l'erreur
Impossible d'activer les contraintes. Une ou plusieurs lignes contiennent des valeurs qui violent les contraintes de type non null, unique ou de clé externe.
Voici les codes des procédures
ALTER PROCEDURE dbo.StoredProcHelpdb AS --EXEC sp_helpdb [ [ @dbname= ] 'name' ] EXEC sp_helpdb RETURN
ALTER PROCEDURE dbo.StoredProcHelpfil AS EXEC sp_helpfile RETURN
Le code des boutons lançant ces procédures
Private Sub butHelpFil_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butHelpFil.Click ' Vous pouvez aussi exécuter la procédure dans le panneaux "Explorateur de serveur" Try Me.Cursor = Cursors.WaitCursor Call Liberation() dgwInfo.DataSource = Nothing wDataTable.Rows.Clear() sqlRequete = "EXEC StoredProcHelpfil" SqlCmd = New SqlCommand(sqlRequete, SqlConx, Sqltrans) SqlDR = SqlCmd.ExecuteReader wDataTable.Load(SqlDR) dgwInfo.DataSource = wDataTable Me.Cursor = Cursors.Default If Not wDataTable Is Nothing Then SqlDR.Close() End If Call Liberation() Catch ex As Exception MsgBox("butHelpFil_Click " & ex.Message) wOk = False Me.Cursor = Cursors.Default End Try End Sub Private Sub butHelpdb_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butHelpdb.Click ' Vous pouvez aussi exécuter la procédure dans le panneaux "Explorateur de serveur" Try Me.Cursor = Cursors.WaitCursor Call Liberation() dgwInfo.DataSource = Nothing wDataTable.Rows.Clear() sqlRequete = "EXEC StoredProcHelpdb" SqlCmd = New SqlCommand(sqlRequete, SqlConx, Sqltrans) SqlDR = SqlCmd.ExecuteReader wDataTable.Load(SqlDR) dgwInfo.DataSource = wDataTable Me.Cursor = Cursors.Default If Not wDataTable Is Nothing Then SqlDR.Close() End If Call Liberation() Catch ex As Exception MsgBox("butHelpdb_Click " & ex.Message) wOk = False Me.Cursor = Cursors.Default End Try End Sub
Pourquoi cette erreur ?
Cordialement Sauveur CONSALVI
Réponses
-
Bonjour
Au premier vue, le problème apparais à cause de wDataTable.Rows.Clear() dans butHelpdb_Click.
Vous avez déjà des informations dans la table des fichiers qui sont liées (ont comme clé étrangère) des informations dans la table des Bases de données.
Donc avant d’effacer les lignes dans la table des BD, vous devez utiliser
wDataTable.EnforceConstraints = false;
et après lire les informations réactiver les contraintes
wDataTable.EnforceConstraints = true;
Cordialement,
- Marqué comme réponse Sauveur Consalvi lundi 3 décembre 2012 16:57
Toutes les réponses
-
-
Bonjour
Au premier vue, le problème apparais à cause de wDataTable.Rows.Clear() dans butHelpdb_Click.
Vous avez déjà des informations dans la table des fichiers qui sont liées (ont comme clé étrangère) des informations dans la table des Bases de données.
Donc avant d’effacer les lignes dans la table des BD, vous devez utiliser
wDataTable.EnforceConstraints = false;
et après lire les informations réactiver les contraintes
wDataTable.EnforceConstraints = true;
Cordialement,
- Marqué comme réponse Sauveur Consalvi lundi 3 décembre 2012 16:57
-
Bonjour,
Bravo. C'est effectivement wDataTable.Rows.Clear() qui posait problème
J'efface maintenant la DataGridView par
dgwInfo.DataSource = Nothing With Me.dgwInfo.Rows .Clear() End With
C'est OK
Merci bien
Cordialement Sauveur CONSALVI
- Modifié Sauveur Consalvi lundi 3 décembre 2012 17:00
-