FIX: 与使用 System.Data 对象的组件相关联的数据可能会损坏建立在 Microsoft.net Framework 2.0 的应用程序中

文章翻译 文章翻译
文章编号: 932491 - 查看本文应用于的产品
展开全部 | 关闭全部

症状

当试图在基于 Microsoft.net Framework 2.0 的应用程序中使用的组件时与组件相关联的数据可能会损坏。当该组件使用 System.Data.DataSet 对象时,会出现此问题。出现此问题时, 您可能会遇到的一个或多个下列问题:
  • 在调用 DataView 类中的 AcceptChanges 方法时,记录管理器可能会损坏。
  • 在表达式中的某一专栏中计算的值可能不正确更新。
  • 通过使用多个语句调用 DataTable.Select 方法时,可能会返回错误的结果。
  • 数据表 对象的内部索引可能会损坏。此外,您收到一条"13"错误消息。
  • 当在合并操作发生时,可能会损坏记录管理者,如果目标行处于编辑状态。
  • 数据表 对象的内部索引可能会损坏。此外,您会收到一个"5"的错误消息。

解决方案

修补程序信息



可以从 Microsoft 获得支持的修补程序。但是,此修补程序被用于解决本文所述的此问题。此修补程序仅应用于出现这一特定问题的系统。此修补程序可能会接受进一步的测试。因此,如果此问题没有对您造成严重的影响,我们建议您等待包含此修补程序的下一个软件更新。

要下载此修补程序从 MSDN 代码库,请访问下面的 Microsoft 网站:
http://code.msdn.microsoft.com/KB932491

注意MSDN 代码库显示在此修补程序是可用的语言。如果您看不到您列出的语言,它是因为代码库的资源页不可用该语言的。

注意如果出现其他问题,或者如果需要进行任何故障诊断,则您可能不得不创建单独的服务请求。将正常收取支持费用将应用于其他支持问题和不需要进行此特定的修补程序的问题。有关完整列表的 Microsoft 客户服务和支持的电话号码,或创建一个单独的服务请求,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support

系统必备组件

没有安装此修补程序需要任何先决条件。

重新启动要求

您不必在应用此修补程序后重新启动计算机。

修补程序替换信息

此修补程序不替代任何其他修补程序。

文件信息

此修补程序的英文版具有的文件属性 (或更新的文件属性) 在下表中列出。日期和时间对这些文件列出在协调世界时 (UTC)。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的 日期和时间 项中的 时区 选项卡。
对于基于 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
对于基于 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: 将 AcceptChanges DataView 类中调用方法时, 记录管理者可能会损坏

在写操作从事件处理程序的过程中,记录管理器损坏可能会出现。如果发生这种情况可能会引发一个 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 元素中的包含不正确的值为 0,而不是为 1。

问题 3: 当通过使用多个语句调用 DataTable.Select 方法时,错误的结果可能会返回

当您使用 数据表 对象一起使用 AND 子句的 Select 方法检索数据的多个语句时,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: 的数据表的内部索引可能会损坏,并且您收到一条"13"错误消息

当您尝试使用 DataSet 对象所使用的 数据表 对象的 AcceptChanges 方法以 AcceptRule.Cascade 设置 ForeignKey 规则时所使用的 DataSet 对象内部的索引值可能会损坏。如果满足下列条件,则会出现此问题:
  • 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. 运行该应用程序。
在这种情况下您会收到以下错误消息:
数据表的内部索引已损坏:"13"。

问题 5: 将出现在合并操作时, 记录管理者可能会损坏如果目标行处于编辑状态

如果正在编辑 数据表 对象中的一个或多个行,再发生 DataTable.Merge 操作或发生 DataSet.Merge 操作,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. 运行该应用程序。
在这种情况下已损坏的 DataSet 对象 DataTable 对象的记录管理器。

要变通解决此问题,请确保没有目标 DataSet 对象中具有设置为已建议 DataRowVersion 值,在使用 DataTable.Merge 方法或 DataSet.Merge 方法之前的行。

问题 6: 数据表对象的内部索引可能会损坏,并且您收到一条"5"的错误消息

在以下情况下导致损坏 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. 运行该应用程序。
在这种情况下您会收到以下错误消息:
数据表的内部索引已损坏:"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
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 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