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

ADO.NET Discussion :

ConstrainException sur l'appel de TableAdapter.Fill()


Sujet :

ADO.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut ConstrainException sur l'appel de TableAdapter.Fill()
    Bonjour à tous,

    Je ne goute que peu à l'exception que je rencontre en ce moment

    Mon DataSet typé se remplit des données de la base à la création. Lors d'un process particulier, je veux vider l'unique table de ce DataSet pour y envoyer de nouvelles données. La seule contrainte définie sur cette table est la clé primaire, qui est composée des deux seuls champs de cette table.

    Voici le code correspondant.

    Ma couche de données utilise un singleton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            public static MigrationData Singleton
            {
                get
                {
                    if (singleton == null)
                        singleton = new MigrationData();
                    return singleton;
                }
            }
     
            private MigrationData()
            {
                this.Init();
            }
    Initialisation du DataSet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            private void Init()
            {
                dataSetMigrationDataBase = new DataSetMigrationDataBase();
                //DataSetMigrationDataBaseTableAdapters.TableAdapterManager migrationDataBaseTableManager = new DataSetMigrationDataBaseTableAdapters.TableAdapterManager();
                partNumbersTableAdapter = new DataSetMigrationDataBaseTableAdapters.PartNumbersTableAdapter();
                partNumbersTableAdapter.Fill(dataSetMigrationDataBase.PartNumbers);
            }
    Vidage de la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		public void ClearPartNumbersTable()
    		{
    			dataSetMigrationDataBase.PartNumbers.Rows.Clear();
    		}
    Insertion dans la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            public void InsertPartNumberCouple(string oldPartNumber, string newPartNumber)
            {
                DataSetMigrationDataBase.PartNumbersRow newDataRow = dataSetMigrationDataBase.PartNumbers.NewPartNumbersRow();
                newDataRow.OldPartNumber = oldPartNumber;
                newDataRow.NewPartNumber = newPartNumber;
                dataSetMigrationDataBase.PartNumbers.Rows.Add(newDataRow);
            }
    Sauvegarde en base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		public void SavePartNumbers()
    		{
    			partNumbersTableAdapter.Update(dataSetMigrationDataBase.PartNumbers);
    		}
    Mon programme, au moment de faire le vidage initial de la table, appelle donc la méthode Init. L'instruction partNumbersTableAdapter.Fill(dataSetMigrationDataBase.PartNumbers) lève alors la ConstraintException suivante :
    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.
    Je ne comprends absolument pas pourquoi, les valeurs de la table ne contenant aucun doublon... Du moins, j'imagine que SQLServer les auraient refusés !

    Merci d'avance pour votre aide, j'avoue ne pas bien saisir. Certainement qu'une énormité ne me saute pas encore aux yeux

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    N'hésitez pas à me demander plus de détails si nécessaire !

  3. #3
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Bonjour,
    Jérôme Lambert a écrit un article sur la résolution des exceptions de contraintes sur les DataSet disponible ici. Pour déterminer la source réelle de ton problème, tu peux donc faire ceci au niveau de ta procédure Init:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    private void Init()
    {
    	dataSetMigrationDataBase = new DataSetMigrationDataBase();
    	//DataSetMigrationDataBaseTableAdapters.TableAdapterManager migrationDataBaseTableManager = new DataSetMigrationDataBaseTableAdapters.TableAdapterManager();
    	partNumbersTableAdapter = new DataSetMigrationDataBaseTableAdapters.PartNumbersTableAdapter();
    	try
        {
    		partNumbersTableAdapter.Fill(dataSetMigrationDataBase.PartNumbers);
    	} 
        catch 
        { 
            foreach (System.Data.DataRow currentError in dataSetMigrationDataBase.PartNumbers.GetErrors())
    		{
    		   MessageBox.Show("Source de l'exception levée: " + currentError.RowError);
    		}
        }
    }
    N'oubliez pas le tag et

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Points : 89
    Points
    89
    Par défaut
    Bonjour,

    Merci pour le bout de code, il m'a été utile !

    Je crois avoir saisi le problème : je vide mal ma base de données. En gros, mon programme vide la table de la base, et la re-remplit avec de nouvelles valeurs. Lors de l'insertion de ces nouvelles valeurs via la méthode partNumbersTableAdapter.Update, l'exception est levée. Cela signifie que la table de la base de données n'est pas réellement vide.

    Voici le bout de code utilisé pour vider cette base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MigrationData.Singleton.ClearPartNumbersTable();
    MigrationData.Singleton.SavePartNumbers();
    Donc, très sommairement, je vide la table du dataset et lance un update sur la base. Pourquoi cela ne fonctionnerait-il pas? :s

    Merci pour le retour, et d'avance merci

  5. #5
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Citation Envoyé par hobotalker Voir le message
    En gros, mon programme vide la table de la base, et la re-remplit avec de nouvelles valeurs. Lors de l'insertion de ces nouvelles valeurs via la méthode partNumbersTableAdapter.Update, l'exception est levée.
    Peux-tu poster le détail de l'exception?
    N'oubliez pas le tag et

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/07/2012, 13h21
  2. Pb de tri sur treeview appelant table sous mysql
    Par forzaxelah dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/07/2006, 09h49
  3. [VB6] Question sur l'appellation d'un elements
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/06/2006, 23h51
  4. Out of memory sur un appel de smtpsend
    Par frangin2003 dans le forum Modules
    Réponses: 1
    Dernier message: 01/06/2006, 14h16
  5. Alimenter le context sur un appel Javascript ?...
    Par Sylvain James dans le forum XMLRAD
    Réponses: 2
    Dernier message: 20/10/2003, 15h44

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