Oprava: Data, která je přidružena součást používá objekt System.data může dojít k poškození v aplikaci, která je integrována v rozhraní Microsoft .NET Framework 2.0

Překlady článku Překlady článku
ID článku: 932491 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Při pokusu použít součást aplikace, která je integrována v rozhraní Microsoft .NET Framework 2.0 může dojít k poškození dat, který je spojen s komponentou. K tomuto problému dochází, pokud součást používá objekt System.Data.DataSet. Když nastane tento problém můžete zaznamenat jeden nebo více následujících problémů:
  • Pokud je volána metoda AcceptChanges v třídy DataView, může dojít k poškození správce záznamu.
  • Vypočtených hodnot ve sloupci výraz nemusí být správně aktualizován.
  • Při volání metody DataTable.Select pomocí vícenásobné příkazy mohou být vráceny nesprávný výsledek.
  • Vnitřní index DataTable objektu může dojít k poškození. Dále obdržíte '13 chybovou zprávu.
  • Dojde-li operace sloučení, správce záznamu může poškozena Pokud je cílový řádek ve stavu úpravy.
  • Vnitřní index DataTable objektu může dojít k poškození. Dále obdržíte '5 chybovou zprávu.

Řešení

Informace o opravě hotfix



K dispozici je podporovaná oprava hotfix od společnosti Microsoft. Tato oprava hotfix je však určena pouze k opravě problému popsanému v tomto článku. Použijte tuto opravu hotfix pouze u systémů, kde dochází k tomuto konkrétnímu problému. Tato oprava hotfix může být dále testována. Pokud Vás tento problém závažně nepostihuje, doporučujeme počkat na další aktualizaci softwaru, která bude tuto opravu hotfix obsahovat.

Chcete-li stáhnout tuto opravu hotfix z MSDN Windows kód, naleznete na následujícím webu:
http://code.msdn.microsoft.com/KB932491

Poznámka: Zobrazí kód Galerie MSDN jazyky, pro které je oprava hotfix k dispozici. Pokud jste váš jazyk uveden, je, protože stránka Galerie kód prostředku není k dispozici pro daný jazyk.

Poznámka: Pokud vyskytnout další problémy nebo jakékoli řešení potíží je vyžadován, pravděpodobně budete muset vytvořit zvláštní požadavek na službu. Výdaje na technickou podporu se týkají dalších otázek a problémů, které nelze vyřešit pomocí této opravy konkrétní opravy hotfix. Navštivte následující web společnosti Microsoft pro získání telefonního čísla na Zákaznické centrum, nebo pokud chcete vytvořit samostatnou žádost o podporu:
http://support.microsoft.com/contactus/?ws=support

Požadavky

Nejsou žádné požadavky nutné pro instalaci této opravy hotfix.

Požadavek na restartování

Po instalaci této opravy hotfix není třeba počítač restartovat.

Informace o nahrazení opravy hotfix

Tato oprava Hotfix nenahrazuje žádné další opravy Hotfix.

INFORMACE O SOUBORECH

Anglická verze této opravy hotfix má následující (nebo pozdější) atributy souborů. Data a časy jednotlivých souborů jsou uvedeny ve formátu UTC (Coordinated Universal Time). Pokud zobrazíte informace o souboru, bude převedena na místní čas. Rozdíl mezi místním ČASEM a najít, použijte kartu časové pásmo v položce datum a čas v ovládacím.
Počítače platformy x86
Zmenšit tuto tabulkuRozšířit tuto tabulku
Název souboruVerze souboruVelikost souboruDatumČasPlatforma
Mscordacwks.dll2.0.50727.802802,3043. 2. 200711: 22X86
Mscorjit.dll2.0.50727.802326,6563. 2. 200711: 22X86
Mscorlib.dll2.0.50727.8024,308,9923. 2. 200711: 22X86
Mscorpe.dll2.0.50727.802102,9123. 2. 200711: 22X86
Mscorwks.dll2.0.50727.8025,625,3443. 2. 200711: 21X86
Normalization.dll2.0.50727.80215,3603. 2. 200711: 22X86
Normidna.nlpNelze použít59,3423. 2. 200711: 22Nelze použít
Normnfc.nlpNelze použít45,7943. 2. 200711: 22Nelze použít
Normnfd.nlpNelze použít39,2843. 2. 200711: 22Nelze použít
Normnfkc.nlpNelze použít66,3843. 2. 200711: 22Nelze použít
Normnfkd.nlpNelze použít60,2943. 2. 200711: 22Nelze použít
Peverify.dll2.0.50727.802136,1923. 2. 200711: 21X86
Sos.dll2.0.50727.802382,4643. 2. 200711: 22X86
System.data.dll2.0.50727.8022,902,0163. 2. 200711: 22X86
System.data.oracleclient.dll2.0.50727.802482,3043. 2. 200711: 22X86
Vsavb7rt.dll8.0.50727.8021,330,6883. 2. 200711: 21X86
Počítače platformy x64
Zmenšit tuto tabulkuRozšířit tuto tabulku
Název souboruVerze souboruVelikost souboruDatumČasPlatforma
Mscordacwks.dll2.0.50727.8021,597,4403. 2. 200703: 14X64
Mscordacwks.dll2.0.50727.802802,3043. 2. 200711: 22X86
Mscorjit.dll2.0.50727.8021,587,7123. 2. 200703: 13X64
Mscorjit.dll2.0.50727.802326,6563. 2. 200711: 22X86
Mscorlib.dll2.0.50727.8023,960,8323. 2. 200706: 28X64
Mscorlib.dll2.0.50727.8024,308,9923. 2. 200711: 22X86
Mscorpe.dll2.0.50727.802157,1843. 2. 200703: 07X64
Mscorpe.dll2.0.50727.802102,9123. 2. 200711: 22X86
Mscorpjt.dll2.0.50727.8022,004,9923. 2. 200703: 13X64
Normalization.dll2.0.50727.80218,4323. 2. 200703: 12X64
Normalization.dll2.0.50727.80215,3603. 2. 200711: 22X86
Normidna.nlpNelze použít59,3423. 2. 200703: 14Nelze použít
Normidna.nlpNelze použít59,3423. 2. 200711: 22Nelze použít
Normnfc.nlpNelze použít45,7943. 2. 200703: 14Nelze použít
Normnfc.nlpNelze použít45,7943. 2. 200711: 22Nelze použít
Normnfd.nlpNelze použít39,2843. 2. 200703: 14Nelze použít
Normnfd.nlpNelze použít39,2843. 2. 200711: 22Nelze použít
Normnfkc.nlpNelze použít66,3843. 2. 200703: 14Nelze použít
Normnfkc.nlpNelze použít66,3843. 2. 200711: 22Nelze použít
Normnfkd.nlpNelze použít60,2943. 2. 200703: 14Nelze použít
Normnfkd.nlpNelze použít60,2943. 2. 200711: 22Nelze použít
Peverify.dll2.0.50727.802136,1923. 2. 200711: 21X86
Peverify.nlp2.0.50727.802205,8243. 2. 200703: 13Nelze použít
Sos.dll2.0.50727.802480,7683. 2. 200703: 22X64
Sos.dll2.0.50727.802382,4643. 2. 200711: 22X86
System.data.dll2.0.50727.8022,967,0403. 2. 200706: 28X64
System.data.dll2.0.50727.8022,902,0163. 2. 200711: 22X86
System.data.oracleclient.dll2.0.50727.802498,6883. 2. 200706: 28X64
System.data.oracleclient.dll2.0.50727.802482,3043. 2. 200711: 22X86
Mscorwks.dll2.0.50727.80210,323,4563. 2. 200703: 11X64
Mscorwks.dll2.0.50727.8025,625,3443. 2. 200711: 21X86
Vsavb7rt.dll8.0.50727.8021,330,6883. 2. 200711: 21X86
Počítače s procesory Itanium
Zmenšit tuto tabulkuRozšířit tuto tabulku
Název souboruVerze souboruVelikost souboruDatumČasPlatforma
Mscordacwks.dll2.0.50727.8022,719,2323. 2. 200703: 15IA-64
Mscordacwks.dll2.0.50727.802802,3043. 2. 200711: 22X86
Mscorjit.dll2.0.50727.8022,705,9203. 2. 200703: 13IA-64
Mscorjit.dll2.0.50727.802326,6563. 2. 200711: 22X86
Mscorlib.dll2.0.50727.8023,960,8323. 2. 200706: 42IA-64
Mscorlib.dll2.0.50727.8024,308,9923. 2. 200711: 22X86
Mscorpe.dll2.0.50727.802313,8563. 2. 200703: 06IA-64
Mscorpe.dll2.0.50727.802102,9123. 2. 200711: 22X86
Mscorpjt.dll2.0.50727.8023,501,0563. 2. 200703: 14IA-64
Normalization.dll2.0.50727.80215,3603. 2. 200711: 22X86
Normalization.dll2.0.50727.80244,0323. 2. 200703: 12IA-64
Fl_normidna.nlpNelze použít59,3423. 2. 200711: 22Nelze použít
Normidna.nlpNelze použít59,3423. 2. 200703: 14Nelze použít
Normnfc.nlpNelze použít45,7943. 2. 200711: 22Nelze použít
Normnfc.nlpNelze použít45,7943. 2. 200703: 14Nelze použít
Normnfd.nlpNelze použít39,2843. 2. 200711: 22Nelze použít
Normnfd.nlpNelze použít39,2843. 2. 200703: 14Nelze použít
Normnfkc.nlpNelze použít66,3843. 2. 200711: 22Nelze použít
Normnfkc.nlpNelze použít66,3843. 2. 200703: 14Nelze použít
Normnfkd.nlpNelze použít60,2943. 2. 200711: 22Nelze použít
Normnfkd.nlpNelze použít60,2943. 2. 200703: 14Nelze použít
Peverify.dll2.0.50727.802136,1923. 2. 200711: 21X86
Peverify.dll2.0.50727.802383,4883. 2. 200703: 13IA-64
Sos.dll2.0.50727.802382,4643. 2. 200711: 22X86
Sos.dll2.0.50727.802862,7203. 2. 200703: 23IA-64
System.data.dll2.0.50727.8022,902,0163. 2. 200711: 22X86
System.data.dll2.0.50727.8023,109,8883. 2. 200706: 42IA-64
System.data.oracleclient.dll2.0.50727.802482,3043. 2. 200711: 22X86
System.data.oracleclient.dll2.0.50727.802501,7603. 2. 200706: 42IA-64
Mscorwks.dll2.0.50727.8025,625,3443. 2. 200711: 21X86
Mscorwks.dll2.0.50727.80221,309,9523. 2. 200703: 11IA-64
Vsavb7rt.dll8.0.50727.8021,330,6883. 2. 200711: 21X86

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Další informace

Problém 1: Při volání metody AcceptChanges v třídy DataView správce záznam může být poškozena

Během operace zápisu z obslužné rutiny události může dojít k poškození záznamu správce. V tomto případě může být vyvolána výjimka System.NullreferenceException. Dále pokud aplikace provádí operace zápisu v ListChanged události, může aktualizace indexu dojít v nesprávné pořadí.

Předpokládejme například následující situaci:
  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. Spuštění aplikace.
V tomto scénáři se zobrazí chybová zpráva podobná následující:
System.NullReferenceException: Odkaz na objekt není nastaven na instanci objektu. v System.Data.DataView.IsOriginalVersion (Int32 index) v System.Data.DataRowView.get_Item (Int32 ndx) v Test.Main() c:\Work\bugs\newbug1\Test.cs:line 42
Chcete-li tento problém vyřešit, neprovádějte žádné operace zápisu v ListChanged události. Je vhodné použít namísto ListChanged událostí událost RowChanged.

Problém 2: Vypočítaný hodnoty ve sloupci výraz nemusí být aktualizován správně

Při pokusu o vypočítat hodnoty sloupce výraz v objektu DataSet a výraz sloupec je součástí relace, nemusí být vypočtených hodnot sloupce výraz aktualizován správně. Předpokládejme například následující situaci:
  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);
        }
    }
  2. Spuštění aplikace.
V tomto scénáři obdržíte následující výstup:
<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>
v tento výstup obsahuje prvek NumberOfReports v první prvek T2 nesprávná hodnota 0 místo 1.

Problém 3: Při volání metody DataTable.Select pomocí vícenásobné příkazy nesprávný výsledek může být vrácen

Při použití metody Vybrat objekt DataTable společně s klauzule AND načítání dat pro vícenásobné příkazy Vybrat metoda může vrátit nesprávný výsledek. Například následující kód vrátí nesprávný výsledek:
string filter = "(NOT ColTwo = 1) AND (ColOne = 2)";
DataTable.Select(filter);
však následující kód vrátí správné výsledek:
string filter = "NOT ColTwo = 1 AND ColOne = 2";
DataTable.Select(filter);
navíc zvažte následující scénář:
  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. Spuštění aplikace.
In this scenario, you receive the following output:
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 this output, "(ColOne = 2)" is incorrectly displayed on the right side of an AND clause.

Problém 4: Vnitřní index DataTable může být poškozena a zobrazí '13 chybová zpráva

Při pokusu použít metodu AcceptChanges objektu DataSet, který používá objekt DataTable a nastavit pravidlo ForeignKey AcceptRule.cascade, může dojít k poškození vnitřní index hodnoty, které používá objekt DataSet. Tento problém nastane v případě splnění následujících podmínek:
  • Objekt DataSet obsahuje jednu nebo více tabulek, které mají na více relací.
  • Je volána metoda AcceptChanges objektu DataSet.
  • Hodnota AcceptRejectRule objekt DataSet nastavena na sebe. Když tato hodnota nastavena na sebe, podřízené tabulky se změní tak, aby jej automaticky přijímá data nebo data odmítne.
Předpokládejme například následující situaci:
  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. Spuštění aplikace.
V tomto případě se zobrazí následující chybová zpráva:
Vnitřní index DataTable je poškozen: '13.

Problém 5: Při výskytu operace sloučení záznamu správce může dojít k poškození Pokud je cílový řádek ve stavu úpravy

Pokud jeden nebo více řádků v objektu DataTable jsou upravovány a potom dojde k DataTable.Merge operace nebo operaci DataSet.Merge dochází, může dojít k poškození správce záznam objektu DataSet objektu DataTable.

Poznámka: Při úpravě řádku v objektu DataTable hodnota DataRowVersion řádku nastavena na navržený.

Předpokládejme například následující situaci:
  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. Spuštění aplikace.
V tomto scénáři správce záznam objektu DataSet objektu DataTable je poškozen.

Chcete-li tento problém vyřešit, zkontrolujte, zda jsou v cílovém objektu DataSet žádné řádky, které mají nastavena hodnota DataRowVersion navržený před použít metodu DataTable.Merge nebo metodu DataSet.Merge.

Problém 6: Vnitřní index DataTable objektu může dojít k poškození a zobrazí '5 chybová zpráva

Následující scénáře způsobit poškození v objektu DataTable změnou dat v objektu DataTable bez aktualizace vnitřní indexy objekt DataTable:
  1. DataColumn.Expression hodnota změněna z výrazu na žádný výraz. V tomto scénáři je dat v objektu objekt DataColumn nastavena typu DBNull.
  2. Při volání metody DataTable.Clear odebrána všechna data v objektu DataTable a indexy jsou aktualizovány. Jiných tabulek odkaz objekt DataTable však nejsou aktualizovány.
Předpokládejme například následující situaci:
  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. Spuštění aplikace.
V tomto případě se zobrazí následující chybová zpráva:
Vnitřní index DataTable je poškozen: '5'.
Další informace naleznete následujícím článku znalostní databáze Microsoft Knowledge Base:
824684Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft

Vlastnosti

ID článku: 932491 - Poslední aktualizace: 3. prosince 2007 - Revize: 1.8
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft .NET Framework 2.0
Klíčová slova: 
kbmt kbfix kbbug kbprb kbexpertiseinter kbexpertisebeginner kbqfe kbpubtypekc KB932491 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:932491

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com