DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 932491 - Dernière mise à jour: lundi 3 décembre 2007 - Version: 1.8

 

Symptômes

Lorsque vous essayez d'utiliser un composant dans une application qui est basée sur Microsoft .NET Framework 2.0, données associées avec le composant peuvent être endommagées. Ce problème se produit lorsque le composant utilise un objet System.Data.DataSet . Lorsque ce problème se produit, vous pouvez rencontrer un ou plusieurs des problèmes suivants :
  • Lorsque la méthode AcceptChanges dans une classe DataView est appelée, le responsable de l'enregistrement peut être endommagé.
  • Les valeurs calculées dans une colonne expression ne peuvent pas être mis à jour correctement.
  • Lorsque la méthode DataTable.Select est appelée à l'aide de plusieurs instructions, un résultat incorrect peut être renvoyé.
  • L'index interne d'un objet DataTable peut être endommagée. En outre, vous recevoir un message d'erreur '13'.
  • Lorsqu'une opération de fusion se produit, le responsable de l'enregistrement peut être endommagé si la ligne cible est dans l'état de modification.
  • L'index interne d'un objet DataTable peut être endommagée. En outre, vous recevoir un message d'erreur « 5 ».

Résolution

Informations sur le correctif



Un correctif est disponible auprès de Microsoft. Toutefois, ce correctif est conçu pour corriger le problème décrit dans cet article. Appliquer ce correctif uniquement aux systèmes rencontrant ce problème spécifique. Ce correctif peut subir des tests supplémentaires. Par conséquent, si vous n'êtes pas gravement touché par ce problème, nous vous recommandons d'attendre la prochaine mise à jour logicielles qui contiendra ce correctif.

Pour télécharger ce correctif de la bibliothèque de code MSDN, reportez-vous au site de Web Microsoft suivant :
http://code.msdn.microsoft.com/KB932491 (http://code.msdn.microsoft.com/KB932491)

note La bibliothèque de code MSDN affiche les langues dont le correctif est disponible. Si vous ne voyez pas votre langue répertorié, il est parce que la page de ressources galerie de code n'est pas disponible pour cette langue.

note Si des problèmes supplémentaires se produisent ou si n'importe quel dépannage est nécessaire, vous devrez peut-être créer une demande de service distincte. Les coûts habituels du support technique s'appliqueront aux autres questions et problèmes non traités par ce correctif spécifique. Pour une liste complète des Microsoft client service et support numéros de téléphone ou pour créer une demande de service distincte, reportez-vous au site de Web Microsoft suivant :
http://support.microsoft.com/contactus/?ws=support (http://support.microsoft.com/contactus/?ws=support)

Conditions préalables

Il n'y a aucune condition préalable pour installer ce correctif.

Demande de redémarrage

Vous devez redémarrer votre ordinateur après avoir appliqué ce correctif.

Informations sur le remplacement de correctif

Ce correctif ne remplace aucun autre correctif.

Informations de fichier

La version anglaise de ce correctif dispose les attributs de fichier (ou attributs de fichier version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont exprimées en temps universel coordonné (UTC). Lorsque vous affichez les informations de fichier, il est convertie en heure locale. Pour connaître le décalage entre l'heure UTC et l'heure locale, utilisez l'onglet Fuseau horaire dans l'élément Date et heure du Panneau de configuration.
Pour x 86
Réduire ce tableauAgrandir ce tableau
Nom de fichierVersion du fichierTaille du fichierDateHeurePlate-forme
Mscordacwks.dll2.0.50727.802802,30403-Fév-200711:22x 86
Mscorjit.dll2.0.50727.802326,65603-Fév-200711:22x 86
Mscorlib.dll2.0.50727.8024,308,99203-Fév-200711:22x 86
Mscorpe.dll2.0.50727.802102,91203-Fév-200711:22x 86
Mscorwks.dll2.0.50727.8025,625,34403-Fév-200711:21x 86
Normalization.dll2.0.50727.80215,36003-Fév-200711:22x 86
Normidna.nlpNon applicable59,34203-Fév-200711:22Non applicable
Normnfc.nlpNon applicable45,79403-Fév-200711:22Non applicable
Normnfd.nlpNon applicable39,28403-Fév-200711:22Non applicable
Normnfkc.nlpNon applicable66,38403-Fév-200711:22Non applicable
Normnfkd.nlpNon applicable60,29403-Fév-200711:22Non applicable
Peverify.dll2.0.50727.802136,19203-Fév-200711:21x 86
Sos.dll2.0.50727.802382,46403-Fév-200711:22x 86
System.Data.dll2.0.50727.8022,902,01603-Fév-200711:22x 86
System.Data.oracleclient.dll2.0.50727.802482,30403-Fév-200711:22x 86
Vsavb7rt.dll8.0.50727.8021,330,68803-Fév-200711:21x 86
Pour les ordinateurs 64 x
Réduire ce tableauAgrandir ce tableau
Nom de fichierVersion du fichierTaille du fichierDateHeurePlate-forme
Mscordacwks.dll2.0.50727.8021,597,44003-Fév-200703:14x 64
Mscordacwks.dll2.0.50727.802802,30403-Fév-200711:22x 86
Mscorjit.dll2.0.50727.8021,587,71203-Fév-200703:13x 64
Mscorjit.dll2.0.50727.802326,65603-Fév-200711:22x 86
Mscorlib.dll2.0.50727.8023,960,83203-Fév-200706:28x 64
Mscorlib.dll2.0.50727.8024,308,99203-Fév-200711:22x 86
Mscorpe.dll2.0.50727.802157,18403-Fév-200703:07x 64
Mscorpe.dll2.0.50727.802102,91203-Fév-200711:22x 86
Mscorpjt.dll2.0.50727.8022,004,99203-Fév-200703:13x 64
Normalization.dll2.0.50727.80218,43203-Fév-200703:12x 64
Normalization.dll2.0.50727.80215,36003-Fév-200711:22x 86
Normidna.nlpNon applicable59,34203-Fév-200703:14Non applicable
Normidna.nlpNon applicable59,34203-Fév-200711:22Non applicable
Normnfc.nlpNon applicable45,79403-Fév-200703:14Non applicable
Normnfc.nlpNon applicable45,79403-Fév-200711:22Non applicable
Normnfd.nlpNon applicable39,28403-Fév-200703:14Non applicable
Normnfd.nlpNon applicable39,28403-Fév-200711:22Non applicable
Normnfkc.nlpNon applicable66,38403-Fév-200703:14Non applicable
Normnfkc.nlpNon applicable66,38403-Fév-200711:22Non applicable
Normnfkd.nlpNon applicable60,29403-Fév-200703:14Non applicable
Normnfkd.nlpNon applicable60,29403-Fév-200711:22Non applicable
Peverify.dll2.0.50727.802136,19203-Fév-200711:21x 86
Peverify.nlp2.0.50727.802205,82403-Fév-200703:13Non applicable
Sos.dll2.0.50727.802480,76803-Fév-200703:22x 64
Sos.dll2.0.50727.802382,46403-Fév-200711:22x 86
System.Data.dll2.0.50727.8022,967,04003-Fév-200706:28x 64
System.Data.dll2.0.50727.8022,902,01603-Fév-200711:22x 86
System.Data.oracleclient.dll2.0.50727.802498,68803-Fév-200706:28x 64
System.Data.oracleclient.dll2.0.50727.802482,30403-Fév-200711:22x 86
Mscorwks.dll2.0.50727.80210,323,45603-Fév-200703:11x 64
Mscorwks.dll2.0.50727.8025,625,34403-Fév-200711:21x 86
Vsavb7rt.dll8.0.50727.8021,330,68803-Fév-200711:21x 86
Pour les ordinateurs Itanium
Réduire ce tableauAgrandir ce tableau
Nom de fichierVersion du fichierTaille du fichierDateHeurePlate-forme
Mscordacwks.dll2.0.50727.8022,719,23203-Fév-200703:15IA-64
Mscordacwks.dll2.0.50727.802802,30403-Fév-200711:22x 86
Mscorjit.dll2.0.50727.8022,705,92003-Fév-200703:13IA-64
Mscorjit.dll2.0.50727.802326,65603-Fév-200711:22x 86
Mscorlib.dll2.0.50727.8023,960,83203-Fév-200706:42IA-64
Mscorlib.dll2.0.50727.8024,308,99203-Fév-200711:22x 86
Mscorpe.dll2.0.50727.802313,85603-Fév-200703:06IA-64
Mscorpe.dll2.0.50727.802102,91203-Fév-200711:22x 86
Mscorpjt.dll2.0.50727.8023,501,05603-Fév-200703:14IA-64
Normalization.dll2.0.50727.80215,36003-Fév-200711:22x 86
Normalization.dll2.0.50727.80244,03203-Fév-200703:12IA-64
Fl_normidna.nlpNon applicable59,34203-Fév-200711:22Non applicable
Normidna.nlpNon applicable59,34203-Fév-200703:14Non applicable
Normnfc.nlpNon applicable45,79403-Fév-200711:22Non applicable
Normnfc.nlpNon applicable45,79403-Fév-200703:14Non applicable
Normnfd.nlpNon applicable39,28403-Fév-200711:22Non applicable
Normnfd.nlpNon applicable39,28403-Fév-200703:14Non applicable
Normnfkc.nlpNon applicable66,38403-Fév-200711:22Non applicable
Normnfkc.nlpNon applicable66,38403-Fév-200703:14Non applicable
Normnfkd.nlpNon applicable60,29403-Fév-200711:22Non applicable
Normnfkd.nlpNon applicable60,29403-Fév-200703:14Non applicable
Peverify.dll2.0.50727.802136,19203-Fév-200711:21x 86
Peverify.dll2.0.50727.802383,48803-Fév-200703:13IA-64
Sos.dll2.0.50727.802382,46403-Fév-200711:22x 86
Sos.dll2.0.50727.802862,72003-Fév-200703:23IA-64
System.Data.dll2.0.50727.8022,902,01603-Fév-200711:22x 86
System.Data.dll2.0.50727.8023,109,88803-Fév-200706:42IA-64
System.Data.oracleclient.dll2.0.50727.802482,30403-Fév-200711:22x 86
System.Data.oracleclient.dll2.0.50727.802501,76003-Fév-200706:42IA-64
Mscorwks.dll2.0.50727.8025,625,34403-Fév-200711:21x 86
Mscorwks.dll2.0.50727.80221,309,95203-Fév-200703:11IA-64
Vsavb7rt.dll8.0.50727.8021,330,68803-Fév-200711:21x 86

Statut

Microsoft a confirmé que c'est un problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations

Problème 1: lorsque la méthode AcceptChanges dans une classe DataView est appelée, le gestionnaire d'enregistrement peut être endommagé

Corruption de l'enregistrement du gestionnaire peut se produire pendant une opération d'écriture depuis un gestionnaire d'événements. Lorsque cela se produit, une exception System.NullreferenceException peut être générée. En outre, lorsque l'application effectue une opération d'écriture dans un événement ListChanged , mises à jour des index peuvent se produire dans un ordre incorrect.

Par exemple, envisagez le scénario suivant :
  1. You use the following code in the application:
    using System;
    using System.ComponentModel;
    using System.Data;
    
    class Test {
        private static DataRow _dr = null;
        private static bool _accept = false;
        
        public static void Main()
        {
            try {
                DataSet ds = new DataSet();
                DataTable dt = ds.Tables.Add("Customers");
                DataColumn c = dt.Columns.Add("Id", typeof(int));
                dt.PrimaryKey = new DataColumn[] { c };
                dt.Columns.Add("Name", typeof(string));
                dt.Columns.Add("Age", typeof(int));
                
                dt.Rows.Add(new object[] { 1, "A", 10 });
                dt.Rows.Add(new object[] { 2, "B", 20 });
                dt.Rows.Add(new object[] { 3, "G", 30 });
                dt.Rows.Add(new object[] { 4, "H", 40 });
                dt.Rows.Add(new object[] { 5, "I", 50 });
    
                ds.AcceptChanges();
                            
                DataView dv = new DataView(dt);
                dv.Sort = "Name ASC";
                                        
                dv.ListChanged += new ListChangedEventHandler(OnListChanged);
                            
                _dr = dt.Rows[4];
                
                _accept = true;
                _dr["Name"] = "C";
                _accept = false;
                            
                _dr["Name"] = "D";
                _dr["Age"] = 55;            
                            
                Console.WriteLine(dv[2][1]);                        
            } catch (Exception exc) {
                Console.WriteLine(exc);
            }
        }
        
        public static void OnListChanged(object sender, ListChangedEventArgs args)
        {
            if (_dr != null && _accept) {
                _dr.AcceptChanges();
            }
        }
    }
  2. Vous exécutez l'application.
Dans ce scénario, un message d'erreur qui ressemble à la message d'erreur suivant s'affiche :
System.NullReferenceException : référence d'objet n'est ne pas définie à une instance d'un objet. à System.Data.DataView.IsOriginalVersion (index int32) à System.Data.DataRowView.get_Item (ndx int32) à Test.Main() dans c:\Work\bugs\newbug1\Test.cs:line 42
Pour contourner ce problème, n'effectuez pas aucune opération d'écriture dans un événement ListChanged . Il est préférable d'utiliser l'événement RowChanged au lieu de l'événement ListChanged .

Problème 2: les valeurs calculées dans une colonne expression ne peuvent pas être mis à jour correctement

Lorsque vous essayez de calculer les valeurs d'une colonne expression dans un objet DataSet , et la colonne expression fait partie d'une relation, les valeurs calculées de la colonne d'expression peut ne pas être actualisées correctement. Par exemple, envisagez le scénario suivant :
  1. You use the following code in the application:
    using System;
    using System.ComponentModel;
    using System.Data;
    
    class Test {
        public static void Main()
        {
            try {
                DataSet ds = new DataSet();
    
                DataTable dt1 = ds.Tables.Add("T1");
                dt1.Columns.Add("CustId", typeof(int));
                dt1.Columns.Add("CustName", typeof(string));
    
                DataTable dt2 = ds.Tables.Add("T2");
                dt2.Columns.Add("EmpId", typeof(int));
                DataColumn dcEmpName = dt2.Columns.Add("EmpName", typeof(string));
                DataColumn dcMgrName = dt2.Columns.Add("MgrName", typeof(string));
                DataColumn dcReports = dt2.Columns.Add("NumberOfReports", typeof(int));
                
                DataRelation rel1 = ds.Relations.Add("T1T2", dt1.Columns["CustId"], dt2.Columns["EmpId"], false);
                DataRelation rel2 = ds.Relations.Add("T2T2", dt2.Columns["EmpName"], dt2.Columns["MgrName"], false);
    
                dcEmpName.Expression = "Parent(T1T2).CustName";
                dcMgrName.Expression = "Parent(T1T2).CustName"; 
    
                //Each person is a manager to himself.
                dcReports.Expression = "Count(Child(T2T2).EmpName)"; 
    
                AddRow(dt1, 1, "N1");
                AddRow(dt1, 2, "N2");
                AddRow(dt1, 3, "N3");
    
                AddRow(dt2, 1);
                AddRow(dt2, 2);
                AddRow(dt2, 3);
    
                Console.WriteLine(ds.GetXml());
    
                dt1.Rows[0]["CustName"] = "N4";
    
                Console.WriteLine(ds.GetXml());
            } catch (Exception exc) {
                Console.WriteLine(exc);
            }
        }
    
        public static void AddRow(DataTable dt, params object[] objArr)
        {
            Console.WriteLine("Adding row to table {0}", dt.TableName);
            dt.Rows.Add(objArr);
        }
    }
    dcReports.Expression = "Count(Child(T2T2).EmpName)" AddRow (dt1, 1, « N1 ») AddRow (dt1, 2, « n2 »); AddRow (dt1, 3, « N3 »); AddRow dt2, 1; AddRow dt2, 2; AddRow dt2, 3; Console.WriteLine(ds.GetXml()) ; dt1.Rows[0]["CustName "] = "N4"; Console.WriteLine(ds.GetXml());} catch (exception exc) {Console.WriteLine(exc);}} publique statique AddRow void (dt DataTable, params objet [] objArr) {Console.WriteLine ("ligne Ajouter à la table {0}", dt.TableName); dt.Rows.Add(objArr);}}
  2. Vous exécutez l'application.
Dans ce scénario, la sortie suivante s'affiche :
<NewDataSet>
 <T1>
   <CustId>1</CustId>
   <CustName>N4</CustName>
 </T1>
 <T1>
   <CustId>2</CustId>
   <CustName>N2</CustName>
 </T1>
 <T1>
   <CustId>3</CustId>
   <CustName>N3</CustName>
 </T1>
 <T2>
   <EmpId>1</EmpId>
   <EmpName>N4</EmpName>
   <MgrName>N4</MgrName>
   <NumberOfReports>0</NumberOfReports> 
 </T2>
 <T2>
   <EmpId>2</EmpId>
   <EmpName>N2</EmpName>
   <MgrName>N2</MgrName>
   <NumberOfReports>1</NumberOfReports>
 </T2>
 <T2>
   <EmpId>3</EmpId>
   <EmpName>N3</EmpName>
   <MgrName>N3</MgrName>
   <NumberOfReports>1</NumberOfReports>
 </T2>
</NewDataSet>
dans cette sortie, l'élément NumberOfReports dans le premier élément T2 contient la valeur incorrecte de 0 au lieu de 1.

Problème 3: lorsque la méthode DataTable.Select est appelée à l'aide de plusieurs instructions, un résultat incorrect peut être renvoyée

Lorsque vous utilisez la méthode Select d'un objet DataTable avec la clause AND pour récupérer des données pour plusieurs instructions, la méthode Select peut retourner un résultat incorrect. Par exemple, le code suivant renvoie un résultat incorrect :
string filter = "(NOT ColTwo = 1) AND (ColOne = 2)";
DataTable.Select(filter);
toutefois, le code suivant renvoie le résultat correct :
string filter = "NOT ColTwo = 1 AND ColOne = 2";
DataTable.Select(filter);
en outre, envisagez le scénario suivant :
  1. You use the following code in the application:
    public static void Main()
    {
      DataTable table = new DataTable();
      table.Columns.Add("ColID", typeof(int));
      table.Columns.Add("ColOne", typeof(int));
      table.Columns.Add("ColTwo", typeof(int));
      table.Rows.Add(new object[] { 1, 1, 1 });
      table.Rows.Add(new object[] { 2, 1, 2 });
      table.Rows.Add(new object[] { 3, 2, 1 });
      table.Rows.Add(new object[] { 4, 2, 2 });
    
      string[] queries = new string[] {
          "(NOT ColTwo = 1) AND (ColOne = 2)",
          "(ColOne = 2) AND (NOT ColTwo = 1)",
    
          "NOT ColTwo = 1 AND ColOne = 2",
          "ColOne = 2 AND NOT ColTwo = 1",
    
          "NOT ColTwo = 1 AND (ColOne = 2)",
          "(ColOne = 2) AND NOT ColTwo = 1",
    
          "(NOT ColTwo = 1) AND ColOne = 2",
          "ColOne = 2 AND (NOT ColTwo = 1)",
      };
    
      Console.WriteLine("Select");
      foreach(string query in queries) {
          DataRow[] rows = table.Select(query);
          Console.WriteLine("query=\"{0}\" count={1}", query, rows.Length);
          foreach(DataRow row in rows) {
              Console.WriteLine("\t{0}, {1}, {2}", row[0], row[1], row[2]);
          }
      }
    }
    
  2. Vous exécutez l'application.

Problème 4: l'index interne d'un DataTable peut être endommagé et vous recevez un message d'erreur '13'

Lorsque vous essayez d'utiliser la méthode AcceptChanges d'un objet DataSet qui est utilisé par l'objet DataTable et vous définissez une règle ForeignKey à AcceptRule.Cascade , les valeurs d'index interne qui sont utilisées par l'objet DataSet peuvent être endommagés. Ce problème se produit si les conditions suivantes sont remplies :
  • L'objet DataSet contient une ou plusieurs tables qui sont en relation un-à-plusieurs.
  • La méthode AcceptChanges de l'objet DataSet est appelée.
  • La valeur AcceptRejectRule de l'objet DataSet est définie à en cascade. Lorsque cette valeur est définie sur en cascade, la table enfant est modifiée et il automatiquement accepte les données ou rejette les données.
Par exemple, envisagez le scénario suivant :
  1. You use the following code in the application:
    public void Main()
    {
    			DataTable Table = new DataTable("Employee");
    			Table.Columns.Add("Id", typeof(int));
    			Table.Columns.Add("ManagerId", typeof(int));
    			Table.Columns.Add("Name", typeof(string));
    
    			Table.Columns["Name"].AllowDBNull = false;
    			Table.PrimaryKey = new DataColumn[] {Table.Columns["Id"]};
    
    			DataSet Employees = new DataSet();
    			Employees.Tables.Add(Table);
    
    			DataRelation rel = Employees.Relations.Add(Table.Columns["ID"], Table.Columns["ManagerId"]);
    			rel.ChildKeyConstraint.AcceptRejectRule = AcceptRejectRule.Cascade;
    
    			DataRow ManagerA = Table.NewRow();
    			ManagerA["ID"] = 2019;
    			ManagerA["Name"] = "Manager A";
    			Table.Rows.Add(ManagerA);
    
    			DataRow ManagerB = Table.NewRow();
    			ManagerB["ID"] = 392;
    			ManagerB["Name"] = "Manager B";
    			Table.Rows.Add(ManagerB);
    
    			DataRow EmployeeB = Table.NewRow();
    			EmployeeB["ID"] = 716;
    			EmployeeB["Name"] = "Employee of B";
    			EmployeeB.SetParentRow(ManagerB);
    			Table.Rows.Add(EmployeeB);
    
    			EmployeeB = Table.NewRow();
    			EmployeeB["ID"] = 637;
    			EmployeeB["Name"] = "2nd employee of B";
    			EmployeeB.SetParentRow(ManagerB);
    			Table.Rows.Add(EmployeeB);
    
    			Employees.AcceptChanges();
    			Table.Rows.Find(392).Delete();
    			Employees.AcceptChanges();
    }
  2. Vous exécutez l'application.
Dans ce scénario, le message d'erreur suivant s'affiche :
Index interne du DataTable est endommagé: '13'.

Problème 5: lorsqu'une opération de fusion se produit, le gestionnaire d'enregistrement peut être endommagé si la ligne cible est dans l'état de modification

Si un ou plusieurs lignes dans un objet DataTable sont en cours de modification et une opération DataTable.Merge ou une opération DataSet.Merge se produit, le gestionnaire d'enregistrement pour l'objet DataSet de l'objet DataTable peut-être endommagé.

note Lorsqu'une ligne dans un objet DataTable est est modifiée, la valeur DataRowVersion de la ligne est définie par proposées.

Par exemple, envisagez le scénario suivant :
  1. You use the following code in the application:
    using System;
    using System.Data;
    using System.Collections.Generic;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                DataSet set = new DataSet();
                DataTable table = set.Tables.Add("table");
                table.Columns.Add("C1", typeof(int));
                table.Columns.Add("C2", typeof(char));
                table.PrimaryKey = new DataColumn[] { table.Columns[0] };
                for (int i = 0; i < 26; ++i)
                {
                    table.Rows.Add(new object[] { i, (char)((ushort)'a' + i) });
                }
                table.AcceptChanges();
    
                DataSet clone = set.Copy();
                clone.Tables[0].Rows[0][1] = 'Z';
                //clone.AcceptChanges();
    
                table.Rows[0][1] = '1';
                table.Rows[0].BeginEdit();
                table.Rows[0][1] = '2';
    
    
                try
                {
                    set.Merge(clone);
                }
                finally
                {
                   foreach (DataRow row in table.Rows) {
    																	Console.WriteLine("{0}={1}", row[0], row[1]);
    															}
                }
    
            }
        }
    }
  2. Vous exécutez l'application.
Dans ce scénario, le gestionnaire d'enregistrement pour l'objet DataSet de l'objet DataTable est endommagé.

Pour contourner ce problème, assurez-vous qu'il existe aucune ligne de l'objet DataSet cible qui ont la valeur DataRowVersion égale à proposé avant d'utiliser la méthode DataTable.Merge ou la méthode DataSet.Merge .

Problème 6: le index interne d'un objet DataTable peut être endommagé et vous recevez un message d'erreur « 5 »

Les scénarios suivants entraîner une altération dans un objet DataTable en modifiant les données de l'objet DataTable sans mettre à jour les index de l'objet DataTable internes :
  1. La valeur DataColumn.Expression est modifiée à partir d'une expression à aucune expression. Dans ce scénario, toutes les données de l'objet DataColumn est défini sur DBNull.
  2. Lorsque la méthode DataTable.Clear est appelée, toutes les données de l'objet DataTable sont supprimées et les index sont mis à jour. Toutefois, les autres tables faisant référence à l'objet DataTable ne sont pas mis à jour.
Par exemple, envisagez le scénario suivant :
  1. You use the following code in the application:
    using System;
    using System.Data;
    using System.Collections.Generic;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                DataSet set = new DataSet("s");
                DataTable table1 = set.Tables.Add("a");
                table1.Columns.Add("C1", typeof(int));
                table1.Columns.Add("C2", typeof(int));
                table1.DefaultView.Sort = "C2";
    
                DataTable table2 = set.Tables.Add("b");
                table2.Columns.Add("C1", typeof(int));
                table2.Columns.Add("C2", typeof(int));
                table2.DefaultView.Sort = "C2";
    
                set.Relations.Add(new DataRelation("t1t2", table1.Columns[0], table2.Columns[0], false));
                table1.Columns[1].Expression = "Sum(Child(t1t2).C2)";
    
                AddData(table1, 1);
                AddData(table2, 2);
    
                table1.Columns[1].Expression = null;
    
                AddData(table2, 2);
                AddData(table1, 2);
    
            }
            private static void AddData(DataTable table, int y)
            {
                object[] x = new object[y];
                Random rand = new Random(20070125);
                for (int i = 0; i < 1000; ++i)
                {
                    switch (rand.Next(3))
                    {
                        case 0:
                        case 1:
                            for (int k = 0; k < x.Length; ++k)
                            {
                                x[k] = rand.Next(500);
                            }
                            table.Rows.Add(x);
                            break;
                        case 2:
                            if (0 < table.Rows.Count)
                            {
                                table.Rows.RemoveAt(rand.Next(table.Rows.Count));
                            }
                            break;
                    }
                }
            }
    
        }
    }
    
    
  2. Vous exécutez l'application.
Dans ce scénario, le message d'erreur suivant s'affiche :
Index interne du DataTable est endommagé: « 5 ».
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
824684  (http://support.microsoft.com/kb/824684/ ) Description de la terminologie standard utilisée pour décrire les mises à jour logicielles Microsoft

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft .NET Framework 2.0
Mots-clés : 
kbmt kbfix kbbug kbprb kbexpertiseinter kbexpertisebeginner kbqfe kbpubtypekc KB932491 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 932491  (http://support.microsoft.com/kb/932491/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store