DetailPage-MSS-KB

Knowledge Base

Artikel ID: 932491 - Laatste beoordeling: zaterdag 22 september 2012 - Wijziging: 4.0

 

Symptomen

Wanneer u een onderdeel in een toepassing die is gebaseerd op Microsoft .NET Framework 2.0, kunnen gegevens die is gekoppeld aan het onderdeel beschadigd raken. Dit probleem treedt op wanneer de component een System.Data.DataSet -object gebruikt. Wanneer dit probleem optreedt, treden een of meer van de volgende problemen op:
  • Wanneer de methode AcceptChanges in een klasse DataView wordt aangeroepen, de manager van de record mogelijk beschadigd.
  • De berekende waarden in een expressiekolom kunnen niet correct bijgewerkt.
  • Wanneer de methode DataTable.Select wordt aangeroepen met meerdere instructies, kan een onjuist resultaat worden geretourneerd.
  • Interne index van een DataTable -object mogelijk beschadigd. Bovendien ontvangt u een foutbericht '13'.
  • Wanneer een samenvoegbewerking plaatsvindt, kan de manager van de record beschadigd raken als de doelrij in de staat bewerken.
  • Interne index van een DataTable -object mogelijk beschadigd. U ontvangt bovendien een foutbericht '5'.

Oplossing

Informatie over hotfixes



Een ondersteunde hotfix is beschikbaar via Microsoft. Deze hotfix is echter alleen bedoeld om alleen het probleem dat in dit artikel wordt beschreven. Deze hotfix alleen uit op systemen waarop dit specifieke probleem zich voordoet. Deze hotfix moet wellicht extra worden getest. Als u geen ernstige hinder van dit probleem, is het daarom raadzaam te wachten op de volgende update waarin deze hotfix is opgenomen.

Deze hotfix downloaden vanaf de MSDN Code galerie, gaat u naar de volgende Microsoft-website:
http://code.msdn.Microsoft.com/KB932491 (http://code.msdn.microsoft.com/KB932491)

Opmerking De galerie MSDN Code weergegeven voor de talen waarvoor de hotfix beschikbaar is. Als u uw taal vermeld niet ziet, is dit omdat de pagina Galerie met Code bron niet beschikbaar voor die taal is.

Opmerking Als er nog andere problemen optreden of als er troubleshooting vereist is, moet u mogelijk een afzonderlijk serviceverzoek indienen. De normale ondersteuningskosten gelden voor extra ondersteuningsvragen die niet in aanmerking voor deze specifieke hotfix komen. Ga naar de volgende Microsoft-website voor een volledige lijst met telefoonnummers van Microsoft Customer Service and Support of een afzonderlijk serviceverzoek maken:
http://support.Microsoft.com/contactus/?ws=support (http://support.microsoft.com/contactus/?ws=support)

Vereisten

Er zijn geen vereisten voor het installeren van deze hotfix.

Opnieuw opstarten

U hoeft niet de computer opnieuw opstarten nadat u deze hotfix toepast.

Vervanging van hotfixes

Deze hotfix vervangt geen andere hotfixes.

Informatie over

De Engelse versie van deze hotfix heeft de bestandskenmerken (of recentere bestandskenmerken) die in de volgende tabel worden weergegeven. De datums en tijden voor deze bestanden worden weergegeven in UTC (Coordinated Universal Time). Wanneer u de bestandsinformatie weergeeft, wordt deze naar lokale tijd geconverteerd. Gebruiken om het verschil tussen UTC en lokale tijd, de Tijdzone tabblad de Datum en tijd een item in het Configuratiescherm.
Voor op x 86 computers
Deze tabel samenvouwenDeze tabel uitklappen
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
Mscordacwks.dll2.0.50727.802802,30403-Feb-200711: 22x 86
Mscorjit.dll2.0.50727.802326,65603-Feb-200711: 22x 86
Mscorlib.dll2.0.50727.8024,308,99203-Feb-200711: 22x 86
Mscorpe.dll2.0.50727.802102,91203-Feb-200711: 22x 86
MSCORWKS.dll2.0.50727.8025,625,34403-Feb-200711: 21x 86
Normalization.dll2.0.50727.80215,36003-Feb-200711: 22x 86
Normidna.nlpNiet van toepassing59,34203-Feb-200711: 22Niet van toepassing
Normnfc.nlpNiet van toepassing45,79403-Feb-200711: 22Niet van toepassing
Normnfd.nlpNiet van toepassing39,28403-Feb-200711: 22Niet van toepassing
Normnfkc.nlpNiet van toepassing66,38403-Feb-200711: 22Niet van toepassing
Normnfkd.nlpNiet van toepassing60,29403-Feb-200711: 22Niet van toepassing
Peverify.dll2.0.50727.802136,19203-Feb-200711: 21x 86
Sos.dll2.0.50727.802382,46403-Feb-200711: 22x 86
System.Data.dll2.0.50727.8022,902,01603-Feb-200711: 22x 86
System.Data.OracleClient.dll2.0.50727.802482,30403-Feb-200711: 22x 86
Vsavb7rt.dll8.0.50727.8021,330,68803-Feb-200711: 21x 86
Voor x 64-gebaseerde computers
Deze tabel samenvouwenDeze tabel uitklappen
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
Mscordacwks.dll2.0.50727.8021,597,44003-Feb-200703: 14x 64
Mscordacwks.dll2.0.50727.802802,30403-Feb-200711: 22x 86
Mscorjit.dll2.0.50727.8021,587,71203-Feb-200703: 13x 64
Mscorjit.dll2.0.50727.802326,65603-Feb-200711: 22x 86
Mscorlib.dll2.0.50727.8023,960,83203-Feb-200706: 28x 64
Mscorlib.dll2.0.50727.8024,308,99203-Feb-200711: 22x 86
Mscorpe.dll2.0.50727.802157,18403-Feb-200703: 07x 64
Mscorpe.dll2.0.50727.802102,91203-Feb-200711: 22x 86
Mscorpjt.dll2.0.50727.8022,004,99203-Feb-200703: 13x 64
Normalization.dll2.0.50727.80218,43203-Feb-200703: 12x 64
Normalization.dll2.0.50727.80215,36003-Feb-200711: 22x 86
Normidna.nlpNiet van toepassing59,34203-Feb-200703: 14Niet van toepassing
Normidna.nlpNiet van toepassing59,34203-Feb-200711: 22Niet van toepassing
Normnfc.nlpNiet van toepassing45,79403-Feb-200703: 14Niet van toepassing
Normnfc.nlpNiet van toepassing45,79403-Feb-200711: 22Niet van toepassing
Normnfd.nlpNiet van toepassing39,28403-Feb-200703: 14Niet van toepassing
Normnfd.nlpNiet van toepassing39,28403-Feb-200711: 22Niet van toepassing
Normnfkc.nlpNiet van toepassing66,38403-Feb-200703: 14Niet van toepassing
Normnfkc.nlpNiet van toepassing66,38403-Feb-200711: 22Niet van toepassing
Normnfkd.nlpNiet van toepassing60,29403-Feb-200703: 14Niet van toepassing
Normnfkd.nlpNiet van toepassing60,29403-Feb-200711: 22Niet van toepassing
Peverify.dll2.0.50727.802136,19203-Feb-200711: 21x 86
Peverify.nlp2.0.50727.802205,82403-Feb-200703: 13Niet van toepassing
Sos.dll2.0.50727.802480,76803-Feb-200703: 22x 64
Sos.dll2.0.50727.802382,46403-Feb-200711: 22x 86
System.Data.dll2.0.50727.8022,967,04003-Feb-200706: 28x 64
System.Data.dll2.0.50727.8022,902,01603-Feb-200711: 22x 86
System.Data.OracleClient.dll2.0.50727.802498,68803-Feb-200706: 28x 64
System.Data.OracleClient.dll2.0.50727.802482,30403-Feb-200711: 22x 86
MSCORWKS.dll2.0.50727.80210,323,45603-Feb-200703: 11x 64
MSCORWKS.dll2.0.50727.8025,625,34403-Feb-200711: 21x 86
Vsavb7rt.dll8.0.50727.8021,330,68803-Feb-200711: 21x 86
Voor Itanium computers
Deze tabel samenvouwenDeze tabel uitklappen
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
Mscordacwks.dll2.0.50727.8022,719,23203-Feb-200703: 15IA-64
Mscordacwks.dll2.0.50727.802802,30403-Feb-200711: 22x 86
Mscorjit.dll2.0.50727.8022,705,92003-Feb-200703: 13IA-64
Mscorjit.dll2.0.50727.802326,65603-Feb-200711: 22x 86
Mscorlib.dll2.0.50727.8023,960,83203-Feb-200706: 42IA-64
Mscorlib.dll2.0.50727.8024,308,99203-Feb-200711: 22x 86
Mscorpe.dll2.0.50727.802313,85603-Feb-200703: 06IA-64
Mscorpe.dll2.0.50727.802102,91203-Feb-200711: 22x 86
Mscorpjt.dll2.0.50727.8023,501,05603-Feb-200703: 14IA-64
Normalization.dll2.0.50727.80215,36003-Feb-200711: 22x 86
Normalization.dll2.0.50727.80244,03203-Feb-200703: 12IA-64
Fl_normidna.nlpNiet van toepassing59,34203-Feb-200711: 22Niet van toepassing
Normidna.nlpNiet van toepassing59,34203-Feb-200703: 14Niet van toepassing
Normnfc.nlpNiet van toepassing45,79403-Feb-200711: 22Niet van toepassing
Normnfc.nlpNiet van toepassing45,79403-Feb-200703: 14Niet van toepassing
Normnfd.nlpNiet van toepassing39,28403-Feb-200711: 22Niet van toepassing
Normnfd.nlpNiet van toepassing39,28403-Feb-200703: 14Niet van toepassing
Normnfkc.nlpNiet van toepassing66,38403-Feb-200711: 22Niet van toepassing
Normnfkc.nlpNiet van toepassing66,38403-Feb-200703: 14Niet van toepassing
Normnfkd.nlpNiet van toepassing60,29403-Feb-200711: 22Niet van toepassing
Normnfkd.nlpNiet van toepassing60,29403-Feb-200703: 14Niet van toepassing
Peverify.dll2.0.50727.802136,19203-Feb-200711: 21x 86
Peverify.dll2.0.50727.802383,48803-Feb-200703: 13IA-64
Sos.dll2.0.50727.802382,46403-Feb-200711: 22x 86
Sos.dll2.0.50727.802862,72003-Feb-200703: 23IA-64
System.Data.dll2.0.50727.8022,902,01603-Feb-200711: 22x 86
System.Data.dll2.0.50727.8023,109,88803-Feb-200706: 42IA-64
System.Data.OracleClient.dll2.0.50727.802482,30403-Feb-200711: 22x 86
System.Data.OracleClient.dll2.0.50727.802501,76003-Feb-200706: 42IA-64
MSCORWKS.dll2.0.50727.8025,625,34403-Feb-200711: 21x 86
MSCORWKS.dll2.0.50727.80221,309,95203-Feb-200703: 11IA-64
Vsavb7rt.dll8.0.50727.8021,330,68803-Feb-200711: 21x 86

Status

Microsoft heeft bevestigd dat dit een probleem is in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.

Meer informatie

Probleem 1: Wanneer de methode AcceptChanges in een klasse DataView wordt aangeroepen, de manager van de record mogelijk beschadigd

Record manager beschadiging optreden tijdens een schrijfbewerking van een gebeurtenis-handler. Wanneer dit gebeurt, kan een uitzondering System.NullreferenceException worden verhoogd. Als een schrijfbewerking de toepassing in een ListChanged activeert na wijziging -gebeurtenis uitvoert, kunnen bovendien index-updates in de verkeerde volgorde optreden.

Bijvoorbeeld het volgende scenario:
  1. U kunt de volgende code gebruiken in de toepassing:
    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. U uitvoert de toepassing.
In dit scenario wordt een foutbericht van de volgende strekking weergegeven:
System.NullReferenceException: Object reference not set to een exemplaar van een object. bij System.Data.DataView.IsOriginalVersion (Int32 index) bij System.Data.DataRowView.get_Item (Int32 ndx) op Test.Main() in c:\Work\bugs\newbug1\Test.cs:line 42
U kunt dit probleem omzeilen voeren geen schrijven-bewerkingen in een ListChanged activeert na wijziging -gebeurtenis. Het is raadzaam de gebeurtenis RowChanged gebruiken in plaats van de gebeurtenis ListChanged activeert na wijziging .

Probleem 2: De berekende waarden in een expressiekolom kunnen niet correct bijgewerkt

Wanneer u probeert te berekenen van de waarden van de kolom in een expressie in een DataSet -object en de expressiekolom deel van een relatie uitmaakt, wordt de berekende waarden van de expressiekolom niet correct bijgewerkt. Bijvoorbeeld het volgende scenario:
  1. U kunt de volgende code gebruiken in de toepassing:
    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);
        }
    }
  2. U uitvoert de toepassing.
In dit scenario wordt de volgende uitvoer:
<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>
In deze uitvoer bevat het NumberOfReports -element in het eerste element T2 onjuiste waarde 0 in plaats van 1.

Probleem 3: Wanneer de methode DataTable.Select wordt aangeroepen met meerdere instructies, een onjuist resultaat kan worden geretourneerd

Wanneer u de methode selecteren van een DataTable -object met de AND-component voor het ophalen van gegevens voor meerdere instructies, kan de methode Select een onjuist resultaat retourneren. De volgende code retourneert bijvoorbeeld een onjuist resultaat:
string filter = "(NOT ColTwo = 1) AND (ColOne = 2)";
DataTable.Select(filter);
De volgende code wordt echter het juiste resultaat retourneert:
string filter = "NOT ColTwo = 1 AND ColOne = 2";
DataTable.Select(filter);
Bovendien het volgende scenario:
  1. U kunt de volgende code gebruiken in de toepassing:
    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. U uitvoert de toepassing.
In dit scenario wordt de volgende uitvoer:
query="(NOT ColTwo = 1) AND (ColOne = 2)" count=2
        3, 2, 1
        4, 2, 2
query="(ColOne = 2) AND (NOT ColTwo = 1)" count=1
        4, 2, 2
query="NOT ColTwo = 1 AND ColOne = 2" count=1
        4, 2, 2
query="ColOne = 2 AND NOT ColTwo = 1" count=1
        4, 2, 2
query="NOT ColTwo = 1 AND (ColOne = 2)" count=2
        3, 2, 1
        4, 2, 2
query="(ColOne = 2) AND NOT ColTwo = 1" count=1
        4, 2, 2
query="(NOT ColTwo = 1) AND ColOne = 2" count=1
        4, 2, 2
query="ColOne = 2 AND (NOT ColTwo = 1)" count=1
        4, 2, 2
In deze uitvoer "(ColOne = 2) ' onjuist wordt weergegeven aan de rechterkant van een AND-component.

Probleem 4: Interne index van een DataTable beschadigd raken en u ontvangt een foutbericht '13'

Wanneer u de methode AcceptChanges van een DataSet -object dat wordt gebruikt door het DataTable -object en u een regel ForeignKey ingesteld op AcceptRule.Cascade, de interne indexwaarden die worden gebruikt door de DataSet -object mogelijk beschadigd. Dit probleem treedt op in de volgende voorwaarden:
  • De DataSet -object bevat een of meer tabellen die een-op-veel-relaties.
  • De methode AcceptChanges van de DataSet -object wordt aangeroepen.
  • De waarde AcceptRejectRule van de DataSet -object is ingesteld op trapsgewijs. Wanneer deze waarde is ingesteld op trapsgewijs, wordt de onderliggende tabel gewijzigd zodat deze automatisch gegevens accepteert of gegevens weigert.
Bijvoorbeeld het volgende scenario:
  1. U kunt de volgende code gebruiken in de toepassing:
    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. U uitvoert de toepassing.
In dit scenario wordt het volgende foutbericht weergegeven:
Interne index van DataTable is beschadigd: '13'.

Probleem 5: Wanneer een samenvoegbewerking plaatsvindt, de manager van de record kan beschadigd raken als de doelrij in de staat bewerken

Als een of meer rijen in een DataTable -object worden bewerkt, een DataTable.Merge bewerking plaatsvindt of een DataSet.Merge -bewerking plaatsvindt, de manager van de record voor de DataSet -object van het DataTable -object mogelijk beschadigd.

Opmerking Wanneer een rij in een DataTable -object wordt bewerkt, wordt de waarde van de DataRowVersion van de rij ingesteld op voorgesteld.

Bijvoorbeeld het volgende scenario:
  1. U kunt de volgende code gebruiken in de toepassing:
    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. U uitvoert de toepassing.
In dit scenario is manager van de record voor de DataSet -object van het DataTable -object beschadigd.

Om dit probleem te omzeilen, zorg er zijn geen rijen in de doel- DataSet -object dat de DataRowVersion is ingesteld op voorgesteld hebben voordat u de methode DataTable.Merge of DataSet.Merge .

Probleem 6: De interne index van een DataTable-object mogelijk beschadigd en u ontvangt een foutbericht '5'

De volgende scenario's raken beschadigd in een DataTable -object door de gegevens in de DataTable -object wijzigen zonder de interne indexen van DataTable -object bijgewerkt:
  1. De waarde DataColumn.Expression is gewijzigd van een expressie geen expressie. In dit scenario wordt de gegevens in het object DataColumn DBNull ingesteld.
  2. Wanneer de methode DataTable.Clear wordt aangeroepen, worden de gegevens in het DataTable -object verwijderd en de indexen worden bijgewerkt. Andere tabellen die verwijzen naar het DataTable -object worden echter niet bijgewerkt.
Bijvoorbeeld het volgende scenario:
  1. U kunt de volgende code gebruiken in de toepassing:
    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. U uitvoert de toepassing.
In dit scenario wordt het volgende foutbericht weergegeven:
Interne index van DataTable is beschadigd: '5'.
Voor meer informatie klikt u op het volgende artikel in de Microsoft Knowledge Base:
824684  (http://support.microsoft.com/kb/824684/ ) Beschrijving van de standaardterminologie die wordt gebruikt om software-updates voor Microsoft te beschrijven

De informatie in dit artikel is van toepassing op:
  • Microsoft .NET Framework 2.0
Trefwoorden: 
kbfix kbbug kbprb kbexpertiseinter kbexpertisebeginner kbqfe kbmt KB932491 KbMtnl
Machine-translated ArticleMachine-translated Article
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende: 932491  (http://support.microsoft.com/kb/932491/en-us/ )
Delen
Extra ondersteuningsopties
Microsoft Community Support-forums
Neem rechtstreeks contact met ons op
Een door Microsoft gecertificeerde partner zoeken
Microsoft Store