FIX: 使用 System.Data 物件的元件相關聯的資料可能損毀的應用程式,建置在 Microsoft.NET Framework 2.0

文章翻譯 文章翻譯
文章編號: 932491 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

徵狀

當您嘗試建置在 Microsoft.NET Framework 2.0 的應用程式中使用元件時,與元件相關聯的資料可能損毀。當元件使用 System.Data.DataSet 物件時,就會發生這個問題。這個問題時可能會遇到一或多個下列問題:
  • 在呼叫 DataView 類別中的 [AcceptChanges] 方法時可能會損毀的記錄經理。
  • 一個運算式] 欄中計算的值可能無法正確更新。
  • 當使用多個陳述式時,會呼叫 DataTable.Select 方法時,可能會傳回不正確的結果。
  • DataTable 物件的內部索引可能會損毀。此外,您會收到一個 '13' 的錯誤訊息。
  • 在合併列印作業時記錄經理可能會損毀如果目標資料列處於編輯狀態。
  • DataTable 物件的內部索引可能會損毀。此外,您還會收到 5' 錯誤訊息。

解決方案

Hotfix 資訊



Microsoft 提供支援的 Hotfix。不過,此 Hotfix 旨在修正本文中所述隨問題。只會發生此特定問題的系統套用此 Hotfix。這個 Hotfix 可能會接受額外的測試。因此,如果您不會嚴重影響這個問題,我們建議您等候下一個包含此 Hotfix 的軟體更新。

如果要下載此 Hotfix 從 MSDN 程式碼庫,請造訪下列 Microsoft 網站]:
http://code.msdn.microsoft.com/KB932491

附註[MSDN 程式碼庫會顯示此 Hotfix 會出現,以供使用的語言。如果您看不到您所列出的語言,它是因為代碼庫資源頁面未提供該語言的支援。

附註如果發生其他問題,或如果需要任何疑難排解,您可能必須建立個別的服務要求。和此 Hotfix 無關的額外支援問題適用一般的支援費用。如需 Microsoft 客戶服務支援部門電話號碼的完整清單或要建立個別的服務要求,請造訪下列 Microsoft 網站:
http://support.microsoft.com/contactus/?ws=support

必要條件

安裝這個 Hotfix 沒有先決條件。

重新啟動需求

您沒有套用此 Hotfix 之後,重新啟動您的電腦。

Hotfix 取代資訊

此 Hotfix 不會取代任何其他的 Hotfix。

檔案資訊

此 Hotfix 的英文版在檔案屬性 (或更新版本的檔案屬性) 如下列表格中所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用在 [日期及時間 中項目控制台中的 [時區] 索引標籤]。
為 x x86 型電腦
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Mscordacwks.dll2.0.50727.802802,3042007 年二月 3 日11: 22x86
Mscorjit.dll2.0.50727.802326,6562007 年二月 3 日11: 22x86
Mscorlib.dll2.0.50727.8024,308,9922007 年二月 3 日11: 22x86
Mscorpe.dll2.0.50727.802102,9122007 年二月 3 日11: 22x86
Mscorwks.dll2.0.50727.8025,625,3442007 年二月 3 日11: 21x86
Normalization.dll2.0.50727.80215,3602007 年二月 3 日11: 22x86
Normidna.nlp不適用59,3422007 年二月 3 日11: 22不適用
Normnfc.nlp不適用45,7942007 年二月 3 日11: 22不適用
Normnfd.nlp不適用39,2842007 年二月 3 日11: 22不適用
Normnfkc.nlp不適用66,3842007 年二月 3 日11: 22不適用
Normnfkd.nlp不適用60,2942007 年二月 3 日11: 22不適用
Peverify.dll2.0.50727.802136,1922007 年二月 3 日11: 21x86
Sos.dll2.0.50727.802382,4642007 年二月 3 日11: 22x86
System.Data.dll2.0.50727.8022,902,0162007 年二月 3 日11: 22x86
System.Data.oracleclient.dll2.0.50727.802482,3042007 年二月 3 日11: 22x86
Vsavb7rt.dll8.0.50727.8021,330,6882007 年二月 3 日11: 21x86
為 x x64 電腦
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Mscordacwks.dll2.0.50727.8021,597,4402007 年二月 3 日03: 14x64
Mscordacwks.dll2.0.50727.802802,3042007 年二月 3 日11: 22x86
Mscorjit.dll2.0.50727.8021,587,7122007 年二月 3 日03: 13x64
Mscorjit.dll2.0.50727.802326,6562007 年二月 3 日11: 22x86
Mscorlib.dll2.0.50727.8023,960,8322007 年二月 3 日06: 28x64
Mscorlib.dll2.0.50727.8024,308,9922007 年二月 3 日11: 22x86
Mscorpe.dll2.0.50727.802157,1842007 年二月 3 日03: 07x64
Mscorpe.dll2.0.50727.802102,9122007 年二月 3 日11: 22x86
Mscorpjt.dll2.0.50727.8022,004,9922007 年二月 3 日03: 13x64
Normalization.dll2.0.50727.80218,4322007 年二月 3 日03: 12x64
Normalization.dll2.0.50727.80215,3602007 年二月 3 日11: 22x86
Normidna.nlp不適用59,3422007 年二月 3 日03: 14不適用
Normidna.nlp不適用59,3422007 年二月 3 日11: 22不適用
Normnfc.nlp不適用45,7942007 年二月 3 日03: 14不適用
Normnfc.nlp不適用45,7942007 年二月 3 日11: 22不適用
Normnfd.nlp不適用39,2842007 年二月 3 日03: 14不適用
Normnfd.nlp不適用39,2842007 年二月 3 日11: 22不適用
Normnfkc.nlp不適用66,3842007 年二月 3 日03: 14不適用
Normnfkc.nlp不適用66,3842007 年二月 3 日11: 22不適用
Normnfkd.nlp不適用60,2942007 年二月 3 日03: 14不適用
Normnfkd.nlp不適用60,2942007 年二月 3 日11: 22不適用
Peverify.dll2.0.50727.802136,1922007 年二月 3 日11: 21x86
Peverify.nlp2.0.50727.802205,8242007 年二月 3 日03: 13不適用
Sos.dll2.0.50727.802480,7682007 年二月 3 日03: 22x64
Sos.dll2.0.50727.802382,4642007 年二月 3 日11: 22x86
System.Data.dll2.0.50727.8022,967,0402007 年二月 3 日06: 28x64
System.Data.dll2.0.50727.8022,902,0162007 年二月 3 日11: 22x86
System.Data.oracleclient.dll2.0.50727.802498,6882007 年二月 3 日06: 28x64
System.Data.oracleclient.dll2.0.50727.802482,3042007 年二月 3 日11: 22x86
Mscorwks.dll2.0.50727.80210,323,4562007 年二月 3 日03: 11x64
Mscorwks.dll2.0.50727.8025,625,3442007 年二月 3 日11: 21x86
Vsavb7rt.dll8.0.50727.8021,330,6882007 年二月 3 日11: 21x86
對於 Itanium 型電腦
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Mscordacwks.dll2.0.50727.8022,719,2322007 年二月 3 日03: 15IA 64
Mscordacwks.dll2.0.50727.802802,3042007 年二月 3 日11: 22x86
Mscorjit.dll2.0.50727.8022,705,9202007 年二月 3 日03: 13IA 64
Mscorjit.dll2.0.50727.802326,6562007 年二月 3 日11: 22x86
Mscorlib.dll2.0.50727.8023,960,8322007 年二月 3 日06: 42IA 64
Mscorlib.dll2.0.50727.8024,308,9922007 年二月 3 日11: 22x86
Mscorpe.dll2.0.50727.802313,8562007 年二月 3 日03: 06IA 64
Mscorpe.dll2.0.50727.802102,9122007 年二月 3 日11: 22x86
Mscorpjt.dll2.0.50727.8023,501,0562007 年二月 3 日03: 14IA 64
Normalization.dll2.0.50727.80215,3602007 年二月 3 日11: 22x86
Normalization.dll2.0.50727.80244,0322007 年二月 3 日03: 12IA 64
Fl_normidna.nlp不適用59,3422007 年二月 3 日11: 22不適用
Normidna.nlp不適用59,3422007 年二月 3 日03: 14不適用
Normnfc.nlp不適用45,7942007 年二月 3 日11: 22不適用
Normnfc.nlp不適用45,7942007 年二月 3 日03: 14不適用
Normnfd.nlp不適用39,2842007 年二月 3 日11: 22不適用
Normnfd.nlp不適用39,2842007 年二月 3 日03: 14不適用
Normnfkc.nlp不適用66,3842007 年二月 3 日11: 22不適用
Normnfkc.nlp不適用66,3842007 年二月 3 日03: 14不適用
Normnfkd.nlp不適用60,2942007 年二月 3 日11: 22不適用
Normnfkd.nlp不適用60,2942007 年二月 3 日03: 14不適用
Peverify.dll2.0.50727.802136,1922007 年二月 3 日11: 21x86
Peverify.dll2.0.50727.802383,4882007 年二月 3 日03: 13IA 64
Sos.dll2.0.50727.802382,4642007 年二月 3 日11: 22x86
Sos.dll2.0.50727.802862,7202007 年二月 3 日03: 23IA 64
System.Data.dll2.0.50727.8022,902,0162007 年二月 3 日11: 22x86
System.Data.dll2.0.50727.8023,109,8882007 年二月 3 日06: 42IA 64
System.Data.oracleclient.dll2.0.50727.802482,3042007 年二月 3 日11: 22x86
System.Data.oracleclient.dll2.0.50727.802501,7602007 年二月 3 日06: 42IA 64
Mscorwks.dll2.0.50727.8025,625,3442007 年二月 3 日11: 21x86
Mscorwks.dll2.0.50727.80221,309,9522007 年二月 3 日03: 11IA 64
Vsavb7rt.dll8.0.50727.8021,330,6882007 年二月 3 日11: 21x86

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。

其他相關資訊

問題 1: 當 DataView 類別中的 [AcceptChanges 方法稱為時,記錄經理可能會損毀

從事件處理常式的寫入作業期間,就可能發生記錄經理損毀。如果發生這種情況可能會產生 System.NullreferenceException 例外狀況。此外,當應用程式執行寫入作業 ListChanged 事件中,索引更新可能會發生不正確的順序。

比方說請考慮下列案例:
  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. 執行應用程式。
在這種情況下,您收到錯誤訊息類似下列的錯誤訊息:
System.NullReferenceException: 物件參考未設定至物件的執行個體。 在 System.Data.DataRowView.get_Item (Int32 ndx) 在 c:\Work\bugs\newbug1\Test.cs:line 42 的 Test.Main() System.Data.DataView.IsOriginalVersion (Int32 索引)
如果要解決這個問題,並不會執行任何寫入作業 ListChanged 事件中。您最好使用 RowChanged 事件,而不是 ListChanged 事件。

問題 2: 運算式資料行中的計算的值可能不會更新正確

當您嘗試計算運算式資料行 的資料集 物件中的值,並且 [運算式] 欄的關聯性一部分時,運算式資料行的計算的值可能無法正確更新。比方說請考慮下列案例:
  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. 執行應用程式。
在這種情況下,您收到下列輸出:
<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>
這個輸出中 NumberOfReports 項目在第一個 T2 項目中的包含不正確的 1 而不是 0 的值。

問題 3: 當使用多個陳述式時,會呼叫 DataTable.Select 方法時,不正確的結果可能會傳回

使用 Select 方法搭配 AND 子句 DataTable 物件的擷取多個陳述式的資料時 Select 方法可能會傳回不正確的結果。例如下列程式碼會傳回不正確的結果:
string filter = "(NOT ColTwo = 1) AND (ColOne = 2)";
DataTable.Select(filter);
但是,下列程式碼會傳回正確的結果:
string filter = "NOT ColTwo = 1 AND ColOne = 2";
DataTable.Select(filter);
此外,請試想下列案例:
  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. 執行應用程式。
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.

問題 4: DataTable 的內部索引可能會損毀,並接收 '13' 錯誤訊息

當您嘗試使用 資料集 物件,DataTable] 物件所用的 AcceptChanges 方法,而且要 AcceptRule.Cascade 設定 ForeignKey 規則時,DataSet 物件所使用的內部索引值可能會損毀。如果下列情況成立,就會發生這個問題:
  • DataSet 物件包含有一對多關聯性的一或多個資料表。
  • 會呼叫 AcceptChanges 方法的 DataSet 物件。
  • 資料集 物件的 AcceptRejectRule 值設定為重疊顯示。當這個值設定為重疊顯示時,子系表格被變更,使它自動接收資料或是拒絕資料。
比方說請考慮下列案例:
  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. 執行應用程式。
在這種情況下您收到下列的錯誤訊息:
DataTable 內部索引已損毀: '13'。

問題 5: 當合併列印作業發生時,記錄經理可能會損毀如果目標資料列處於編輯狀態

如果在 DataTable 物件中的一或多個資料列會被編輯,然後 DataTable.Merge 作業發生或發生 DataSet.Merge 操作,DataTable 物件的 DataSet 物件的記錄經理可能會損毀。

附註當正在編輯一個 DataTable 物件中的資料列時,[DataRowVersion 值時,資料列是設定為 [建議。

比方說請考慮下列案例:
  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. 執行應用程式。
在這種情況下 DataTable 物件的 DataSet 物件的記錄經理已損毀。

若要解決這個問題,請確定有目的地 DataSet 物件中有 DataRowVersion 值設定為 [建議,使用 DataTable.Merge 方法或 DataSet.Merge 方法之前的任何資料列。

問題 6: DataTable 物件的內部索引可能會損毀,並接收 '5' 錯誤訊息

下列案例在 DataTable 物件會造成損毀,藉由變更 DataTable 物件中的資料而不需更新的 DataTable 物件內部的索引:
  1. DataColumn.Expression 值從運算式變更為沒有運算式。在這種情況下 DataColumn 物件中的所有資料都設定為 DBNull。
  2. 在呼叫 DataTable.Clear 方法 DataTable 物件中的所有資料會被都移除,而索引會更新。不過,並不會更新參考 DataTable 物件的其他資料表。
比方說請考慮下列案例:
  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. 執行應用程式。
在這種情況下您收到下列的錯誤訊息:
DataTable 內部索引已損毀: '5'。
如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
824684用來描述 Microsoft 軟體更新標準術語的說明

屬性

文章編號: 932491 - 上次校閱: 2007年12月3日 - 版次: 1.8
這篇文章中的資訊適用於:
  • Microsoft .NET Framework 2.0
關鍵字:?
kbmt kbfix kbbug kbprb kbexpertiseinter kbexpertisebeginner kbqfe kbpubtypekc KB932491 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:932491
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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