System.Data オブジェクトを使用するコンポーネントに関連付けられているデータが破損する Microsoft.NET Framework 2.0 上に構築されたアプリケーションで修正。

現象

Microsoft.NET Framework 2.0 でビルドされたアプリケーションでコンポーネントを使用しようとすると、コンポーネントに関連付けられているデータが破損する可能性があります。この問題は、コンポーネントがSystem.Data.DataSetオブジェクトを使用する場合に発生します。この問題が発生した場合、次の問題の 1 つ以上が発生する可能性があります。
  • DataViewクラスでAcceptChangesメソッドを呼び出すと、レコード マネージャーが破損する可能性があります。
  • 式列の計算値が正しく更新されません可能性があります。
  • 複数のステートメントを使用して、 DataTable.Selectメソッドを呼び出すと、誤った結果が返される場合があります。
  • DataTableオブジェクトの内部インデックスが破損します。さらに、'13' エラー メッセージが表示されます。
  • マージ操作が発生した場合、レコード マネージャーが破損する場合は、対象の行が編集状態にします。
  • DataTableオブジェクトの内部インデックスが破損します。さらに、'5' のエラー メッセージが表示されます。

解決策

修正プログラムの情報



サポートされている修正プログラムは、マイクロソフトから入手可能です。ただし、この修正プログラムは、ここで説明する問題のみを修正することを目的としたものです。この問題が発生しているシステムにのみ適用してください。この修正プログラムは、今後さらにテストを行う場合があります。したがって、この問題の影響が深刻でない場合は、この修正プログラムが含まれる次のソフトウェア更新プログラムがリリースされるまで待つことをお勧めします。

この修正プログラムを MSDN コード ギャラリーからダウンロードするには、次のマイクロソフト Web サイトを参照してください。


注: MSDN コード ギャラリーの修正プログラムは利用可能な言語を表示します。自分の言語が一覧に表示されない場合は、その言語用のコード ギャラリー リソース ページが使用できないためです。


注: さらなる問題が発生した場合、またはトラブルシューティングが必要な場合には、別のサービス リクエストの作成が必要な場合があります。この修正プログラムの対象外の追加の質問および問題については、通常のサポート料金が適用されます。マイクロソフト カスタマー サービス サポートの電話番号一覧または別のサービス リクエストの作成については、次のマイクロソフト Web サイトを参照してください。

必要条件

この修正プログラムをインストールするための前提条件はありません。

再起動の必要性

この修正プログラムを適用した後に、コンピューターを再起動することはありません。

修正プログラムの置き換えに関する情報

この修正プログラムによって他の修正プログラムが置き換わることはありません。

ファイル情報

修正プログラム (英語版) のファイル属性は次表のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。各ファイルの日付および時刻は、世界協定時刻 (UTC) で示されています。ファイル情報に表示される時刻は、ローカル時刻に変換されています。UTC とローカル時刻との時差を確認するには、コントロール パネルの [日付と時刻] の [タイム ゾーン] タブを使用してください。
X86 ベースのコンピューターに
ファイル名ファイル バージョンファイル サイズ日付時刻プラットフォーム
Mscordacwks.dll2.0.50727.802802,30403-Feb-200711:22x86
Mscorjit.dll2.0.50727.802326,65603-Feb-200711:22x86
Mscorlib.dll2.0.50727.8024,308,99203-Feb-200711:22x86
Mscorpe.dll2.0.50727.802102,91203-Feb-200711:22x86
Mscorwks.dll2.0.50727.8025,625,34403-Feb-200711:21x86
Normalization.dll2.0.50727.80215,36003-Feb-200711:22x86
Normidna.nlp該当なし59,34203-Feb-200711:22該当なし
Normnfc.nlp該当なし45,79403-Feb-200711:22該当なし
Normnfd.nlp該当なし39,28403-Feb-200711:22該当なし
Normnfkc.nlp該当なし66,38403-Feb-200711:22該当なし
Normnfkd.nlp該当なし60,29403-Feb-200711:22該当なし
Peverify.dll2.0.50727.802136,19203-Feb-200711:21x86
Sos.dll2.0.50727.802382,46403-Feb-200711:22x86
System.data.dll2.0.50727.8022,902,01603-Feb-200711:22x86
System.data.oracleclient.dll2.0.50727.802482,30403-Feb-200711:22x86
Vsavb7rt.dll8.0.50727.8021,330,68803-Feb-200711:21x86
X64 ベースのコンピューターに
ファイル名ファイル バージョンファイル サイズ日付時刻プラットフォーム
Mscordacwks.dll2.0.50727.8021,597,44003-Feb-200703:14x64
Mscordacwks.dll2.0.50727.802802,30403-Feb-200711:22x86
Mscorjit.dll2.0.50727.8021,587,71203-Feb-200703:13x64
Mscorjit.dll2.0.50727.802326,65603-Feb-200711:22x86
Mscorlib.dll2.0.50727.8023,960,83203-Feb-200706:28x64
Mscorlib.dll2.0.50727.8024,308,99203-Feb-200711:22x86
Mscorpe.dll2.0.50727.802157,18403-Feb-200703:07x64
Mscorpe.dll2.0.50727.802102,91203-Feb-200711:22x86
Mscorpjt.dll2.0.50727.8022,004,99203-Feb-200703:13x64
Normalization.dll2.0.50727.80218,43203-Feb-200703:12x64
Normalization.dll2.0.50727.80215,36003-Feb-200711:22x86
Normidna.nlp該当なし59,34203-Feb-200703:14該当なし
Normidna.nlp該当なし59,34203-Feb-200711:22該当なし
Normnfc.nlp該当なし45,79403-Feb-200703:14該当なし
Normnfc.nlp該当なし45,79403-Feb-200711:22該当なし
Normnfd.nlp該当なし39,28403-Feb-200703:14該当なし
Normnfd.nlp該当なし39,28403-Feb-200711:22該当なし
Normnfkc.nlp該当なし66,38403-Feb-200703:14該当なし
Normnfkc.nlp該当なし66,38403-Feb-200711:22該当なし
Normnfkd.nlp該当なし60,29403-Feb-200703:14該当なし
Normnfkd.nlp該当なし60,29403-Feb-200711:22該当なし
Peverify.dll2.0.50727.802136,19203-Feb-200711:21x86
Peverify.nlp2.0.50727.802205,82403-Feb-200703:13該当なし
Sos.dll2.0.50727.802480,76803-Feb-200703:22x64
Sos.dll2.0.50727.802382,46403-Feb-200711:22x86
System.data.dll2.0.50727.8022,967,04003-Feb-200706:28x64
System.data.dll2.0.50727.8022,902,01603-Feb-200711:22x86
System.data.oracleclient.dll2.0.50727.802498,68803-Feb-200706:28x64
System.data.oracleclient.dll2.0.50727.802482,30403-Feb-200711:22x86
Mscorwks.dll2.0.50727.80210,323,45603-Feb-200703:11x64
Mscorwks.dll2.0.50727.8025,625,34403-Feb-200711:21x86
Vsavb7rt.dll8.0.50727.8021,330,68803-Feb-200711:21x86
Itanium ベースのコンピューターに
ファイル名ファイル バージョンファイル サイズ日付時刻プラットフォーム
Mscordacwks.dll2.0.50727.8022,719,23203-Feb-200703:15IA-64
Mscordacwks.dll2.0.50727.802802,30403-Feb-200711:22x86
Mscorjit.dll2.0.50727.8022,705,92003-Feb-200703:13IA-64
Mscorjit.dll2.0.50727.802326,65603-Feb-200711:22x86
Mscorlib.dll2.0.50727.8023,960,83203-Feb-200706:42IA-64
Mscorlib.dll2.0.50727.8024,308,99203-Feb-200711:22x86
Mscorpe.dll2.0.50727.802313,85603-Feb-200703:06IA-64
Mscorpe.dll2.0.50727.802102,91203-Feb-200711:22x86
Mscorpjt.dll2.0.50727.8023,501,05603-Feb-200703:14IA-64
Normalization.dll2.0.50727.80215,36003-Feb-200711:22x86
Normalization.dll2.0.50727.80244,03203-Feb-200703:12IA-64
Fl_normidna.nlp該当なし59,34203-Feb-200711:22該当なし
Normidna.nlp該当なし59,34203-Feb-200703:14該当なし
Normnfc.nlp該当なし45,79403-Feb-200711:22該当なし
Normnfc.nlp該当なし45,79403-Feb-200703:14該当なし
Normnfd.nlp該当なし39,28403-Feb-200711:22該当なし
Normnfd.nlp該当なし39,28403-Feb-200703:14該当なし
Normnfkc.nlp該当なし66,38403-Feb-200711:22該当なし
Normnfkc.nlp該当なし66,38403-Feb-200703:14該当なし
Normnfkd.nlp該当なし60,29403-Feb-200711:22該当なし
Normnfkd.nlp該当なし60,29403-Feb-200703:14該当なし
Peverify.dll2.0.50727.802136,19203-Feb-200711:21x86
Peverify.dll2.0.50727.802383,48803-Feb-200703:13IA-64
Sos.dll2.0.50727.802382,46403-Feb-200711:22x86
Sos.dll2.0.50727.802862,72003-Feb-200703:23IA-64
System.data.dll2.0.50727.8022,902,01603-Feb-200711:22x86
System.data.dll2.0.50727.8023,109,88803-Feb-200706:42IA-64
System.data.oracleclient.dll2.0.50727.802482,30403-Feb-200711:22x86
System.data.oracleclient.dll2.0.50727.802501,76003-Feb-200706:42IA-64
Mscorwks.dll2.0.50727.8025,625,34403-Feb-200711:21x86
Mscorwks.dll2.0.50727.80221,309,95203-Feb-200703:11IA-64
Vsavb7rt.dll8.0.50727.8021,330,68803-Feb-200711:21x86

状況

マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。

詳細

問題 1: DataView クラスで AcceptChanges メソッドを呼び出すと、レコード ・ マネージャーが破損します。

レコード マネージャー破損は、イベント ハンドラーから書き込み操作中に発生します。このような場合は、お例外が発生します。また、アプリケーションは、 ListChangedイベントで書き込み操作を実行するときに間違った順序でインデックスの更新が発生する可能性があります。

たとえば、次のシナリオを考えます。
  1. アプリケーションでは、次のコードを使用します。
    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. アプリケーションを実行するとします。
このシナリオでは、次のエラー メッセージのようなエラー メッセージが表示されます。
お: オブジェクト参照がオブジェクトのインスタンスに設定されていません。c:\Work\bugs\newbug1\Test.cs:line 42 で Test.Main() に System.Data.DataRowView.get_Item (Int32 ndx) で System.Data.DataView.IsOriginalVersion (Int32 インデックス) に
この問題を回避するのには実行されませんすべての書き込み操作ListChangedイベントで。ListChangedイベントではなく、 RowChangedイベントを使用することをお勧めします。

問題 2: 式列の計算値が正しく更新されません。

DataSetオブジェクト内の式列の値を計算しようとすると、式列がリレーションシップの一部、計算式の列の値が正しく更新されません可能性があります。たとえば、次のシナリオを考えます。
  1. アプリケーションでは、次のコードを使用します。
    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>
この出力では、T2 の最初の要素内のNumberOfReports要素には、1 ではなく 0 が正しくない値が含まれています。

問題 3: 複数のステートメントを使用して、DataTable.Select メソッドを呼び出すと、誤った結果が返される

複数のステートメントのデータを取得するのには、and 句とDataTableオブジェクトの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. アプリケーションでは、次のコードを使用します。
    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. アプリケーションを実行するとします。
このシナリオでは、次の出力が表示されます。
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

この出力では、"(ColOne = 2)"が正しく表示されない、AND 句の右側にあります。

問題 4: データ テーブルの内部インデックスが破損し、'13' エラー メッセージが表示されます。

DataTableオブジェクトによって使用されるデータセットオブジェクトのAcceptChangesメソッドを使用しようとすると、不変のルールをAcceptRule.Cascadeに設定する、 DataSetオブジェクトによって使用される内部のインデックス値が破損する可能性があります。この問題は、次の条件に該当する場合に発生します。
  • データセットオブジェクトには、一対多リレーションシップを持つ 1 つまたは複数のテーブルが含まれています。
  • DataSetオブジェクトのAcceptChangesメソッドが呼び出されます。
  • DataSetオブジェクトのAcceptRejectRuleの値は、重ねて表示に設定されます。連鎖にこの値を設定すると、自動的にデータを受け入れるかデータを拒否するように、子テーブルが変更されます。
たとえば、次のシナリオを考えます。
  1. アプリケーションでは、次のコードを使用します。
    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オブジェクト内の 1 つまたは複数の行が変更されていますとDataTable.Merge操作が発生するか、 DataSet.Merge操作が発生した、 DataTableオブジェクトのデータセットオブジェクトのレコード管理者が破損する可能性があります。

注: DataTableオブジェクト内の行が編集中の場合、行のDataRowVersion値に設定されています。

たとえば、次のシナリオを考えます。
  1. アプリケーションでは、次のコードを使用します。
    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オブジェクトのデータセットオブジェクトのレコード管理者が壊れています。

この問題を回避するのには、 DataTable.MergeメソッドまたはMergeメソッドを使用する前に、仮予約] に設定したDataRowVersion値を持つ行をDataSetオブジェクトを転送先に存在しないことを確認します。

問題 6: データ テーブル オブジェクトの内部インデックスが破損すると '5' のエラー メッセージが表示されます。

DataTableオブジェクトでデータ テーブルオブジェクトの内部インデックスを更新せず、 DataTableオブジェクト内のデータを変更することによって破損が発生する次のシナリオ。
  1. DataColumn.Expression値は、式を指定せずに、式から変更されます。このシナリオでは、 DataColumnオブジェクト内のすべてのデータが DBNull に設定されています。
  2. DataTable.Clearメソッドが呼び出されると、 DataTableオブジェクト内のすべてのデータが削除され、インデックスが更新されます。ただし、 DataTableオブジェクトを参照する他のテーブルは更新されません。
たとえば、次のシナリオを考えます。
  1. アプリケーションでは、次のコードを使用します。
    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'。
詳細については、次の文書番号をクリックして、マイクロソフト サポート技術情報の資料をご参照ください。

824684マイクロソフトのソフトウェア更新プログラムを記述するために使用される一般的な用語説明

プロパティ

文書番号:932491 - 最終更新日: 2017/02/02 - リビジョン: 1

Microsoft .NET Framework 2.0

フィードバック