DataTable.Merge メソッド (DataTable)
アセンブリ: System.Data (system.data.dll 内)


Merge メソッドを使用して、スキーマがほとんど同様の 2 つの DataTable オブジェクトをマージします。マージは、通常、データ ソースから既存の DataTable に直前の変更を組み込むために、クライアント アプリケーションで使用されます。これにより、クライアント アプリケーションが更新された DataTable と、データ ソースからの最新データを入手できます。
マージ操作では、元のテーブルおよびマージするテーブルだけが考慮されます。子テーブルは影響を受けることも追加されることもありません。テーブルに、リレーションシップの一部として定義された 1 つ以上の子テーブルが存在する場合、各子テーブルを個別にマージする必要があります。
通常、Merge メソッドは、変更の検証、エラーの調整、変更されたデータ ソースの更新、および最後に既存の DataTable の更新に関係する一連のプロシージャの終わりに呼び出されます。
マージを実行する場合、既定では、マージ操作中はマージ前に既存のデータに加えられた変更が保持されます。この動作を変更するには、このメソッドの他の 2 つのオーバーロードのどちらかを呼び出し、preserveChanges パラメータを false に指定します。
クライアント アプリケーションには通常、変更されたデータを収集し、中間層コンポーネントに戻す前に検証するためにクリックできる単一のボタンがあります。このシナリオでは、初めに GetChanges メソッドを呼び出します。このメソッドは、検証とマージのために最適化された 2 番目の DataTable を返します。2 番目の DataTable オブジェクトには、変更された DataRow オブジェクトだけが含まれ、元の DataTable のサブセットになります。このサブセットは一般的に小さいため、中間層コンポーネントに効率よく渡されます。次に、中間層コンポーネントは、ストアド プロシージャを通じて変更のある元のデータ ソースを更新します。次に、中間層は (元のクエリを再び実行することによって) 元のデータとデータ ソースからの最新のデータを含む新しい DataTable を返信するか、データ ソースから変更の加えられたサブセットを返信できます。たとえば、データ ソースが自動的に一意の主キー値を作成する場合、その値はクライアント アプリケーションに反映できます。どちらの場合にも、返された DataTable は、Merge メソッドで、クライアント アプリケーションの元の DataTable にマージできます。
新しいソース DataTable をターゲットにマージする場合、DataRowState 値が Unchanged、Modified、または Deleted であるすべてのソース行が、同じ主キー値を持つターゲット行と照合されます。DataRowState 値が Added のソース行は、新しいソース行と同じ主キー値を持つ新しいターゲット行と照合されます。

次に示すコンソール アプリケーションの例では、単純な DataTable を作成して、このテーブルにデータを追加します。次にテーブルのコピーを作成し、そのコピーに行を追加します。最後に Merge メソッドを呼び出し、最初のテーブルのデータと 2 番目のテーブルのデータをマージします。
Private Sub DemonstrateMergeTable() Dim table1 As New DataTable("Items") ' Add columns Dim column1 As New DataColumn("id", GetType(System.Int32)) Dim column2 As New DataColumn("item", GetType(System.Int32)) table1.Columns.Add(column1) table1.Columns.Add(column2) ' Set the primary key column. table1.PrimaryKey = New DataColumn() {column1} ' Add RowChanged event handler for the table. AddHandler table1.RowChanged, AddressOf Row_Changed ' Add some rows. Dim row As DataRow For i As Integer = 0 To 3 row = table1.NewRow() row("id") = i row("item") = i table1.Rows.Add(row) Next i ' Accept changes. table1.AcceptChanges() PrintValues(table1, "Original values") ' Create a second DataTable identical to the first. Dim table2 As DataTable = table1.Clone() ' Add three rows. Note that the id column can't be the ' same as existing rows in the original table. row = table2.NewRow() row("id") = 14 row("item") = 774 table2.Rows.Add(row) row = table2.NewRow() row("id") = 12 row("item") = 555 table2.Rows.Add(row) row = table2.NewRow() row("id") = 13 row("item") = 665 table2.Rows.Add(row) ' Merge table2 into the table1. Console.WriteLine("Merging") table1.Merge(table2) PrintValues(table1, "Merged With table1") End Sub Private Sub Row_Changed(ByVal sender As Object, _ ByVal e As DataRowChangeEventArgs) Console.WriteLine("Row changed {0}{1}{2}", _ e.Action, ControlChars.Tab, e.Row.ItemArray(0)) End Sub Private Sub PrintValues(ByVal table As DataTable, _ ByVal label As String) ' Display the values in the supplied DataTable: Console.WriteLine(label) For Each row As DataRow In table.Rows For Each col As DataColumn In table.Columns Console.Write(ControlChars.Tab + " " + row(col).ToString()) Next col Console.WriteLine() Next row End Sub
private static void DemonstrateMergeTable() { DataTable table1 = new DataTable("Items"); // Add columns DataColumn column1 = new DataColumn("id", typeof(System.Int32)); DataColumn column2 = new DataColumn("item", typeof(System.Int32)); table1.Columns.Add(column1); table1.Columns.Add(column2); // Set the primary key column. table1.PrimaryKey = new DataColumn[] { column1 }; // Add RowChanged event handler for the table. table1.RowChanged += new System.Data.DataRowChangeEventHandler(Row_Changed); // Add some rows. DataRow row; for (int i = 0; i <= 3; i++) { row = table1.NewRow(); row["id"] = i; row["item"] = i; table1.Rows.Add(row); } // Accept changes. table1.AcceptChanges(); PrintValues(table1, "Original values"); // Create a second DataTable identical to the first. DataTable table2 = table1.Clone(); // Add three rows. Note that the id column can't be the // same as existing rows in the original table. row = table2.NewRow(); row["id"] = 14; row["item"] = 774; table2.Rows.Add(row); row = table2.NewRow(); row["id"] = 12; row["item"] = 555; table2.Rows.Add(row); row = table2.NewRow(); row["id"] = 13; row["item"] = 665; table2.Rows.Add(row); // Merge table2 into the table1. Console.WriteLine("Merging"); table1.Merge(table2); PrintValues(table1, "Merged With table1"); } private static void Row_Changed(object sender, DataRowChangeEventArgs e) { Console.WriteLine("Row changed {0}\t{1}", e.Action, e.Row.ItemArray[0]); } private static void PrintValues(DataTable table, string label) { // Display the values in the supplied DataTable: Console.WriteLine(label); foreach (DataRow row in table.Rows) { foreach (DataColumn col in table.Columns) { Console.Write("\t " + row[col].ToString()); } Console.WriteLine(); } }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


DataTable.Merge メソッド

名前 | 説明 |
---|---|
DataTable.Merge (DataTable) | 指定した DataTable を現在の DataTable とマージします。 .NET Compact Framework によってサポートされています。 |
DataTable.Merge (DataTable, Boolean) | 指定した DataTable を現在の DataTable とマージし、現在の DataTable の変更を保持するかどうかを指定します。 .NET Compact Framework によってサポートされています。 |
DataTable.Merge (DataTable, Boolean, MissingSchemaAction) | 指定した DataTable を現在の DataTable とマージして、現在の DataTable の変更を保持するかどうかを指定し、さらに欠けているスキーマの処理方法を指定します。 .NET Compact Framework によってサポートされています。 |

DataTable.Merge メソッド (DataTable, Boolean)
アセンブリ: System.Data (system.data.dll 内)

Dim instance As DataTable Dim table As DataTable Dim preserveChanges As Boolean instance.Merge(table, preserveChanges)

Merge メソッドを使用して、スキーマがほとんど同様の 2 つの DataTable オブジェクトをマージします。マージは、通常、データ ソースから既存の DataTable に直前の変更を組み込むために、クライアント アプリケーションで使用されます。これにより、クライアント アプリケーションが更新された DataTable と、データ ソースからの最新データを入手できます。
マージ操作では、元のテーブルおよびマージするテーブルだけが考慮されます。子テーブルは影響を受けることも追加されることもありません。テーブルに、リレーションシップの一部として定義された 1 つ以上の子テーブルが存在する場合、各子テーブルを個別にマージする必要があります。
通常、Merge メソッドは、変更の検証、エラーの調整、変更されたデータ ソースの更新、および最後に既存の DataTable の更新に関係する一連のプロシージャの終わりに呼び出されます。
マージを実行すると、preserveChanges パラメータに false が指定されていない限り、マージ操作中はマージの前に既存のデータに加えられた変更が保持されます。preserveChanges パラメータが true に設定されている場合、既存の行の現在の行バージョンにある既存の値は受信された値によって上書きされません。preserveChanges パラメータが false に設定されている場合、既存の行の現在の行バージョンにある既存の値は、受信された値によって上書きされます。行のバージョンの詳細については、「行の状態とバージョン」を参照してください。
クライアント アプリケーションには通常、変更されたデータを収集し、中間層コンポーネントに戻す前に検証するためにクリックできる単一のボタンがあります。このシナリオでは、初めに GetChanges メソッドを呼び出します。このメソッドは、検証とマージのために最適化された 2 番目の DataTable を返します。2 番目の DataTable オブジェクトには、変更された DataTable オブジェクトおよび DataRow オブジェクトだけが含まれ、元の DataTable のサブセットになります。このサブセットは一般的に小さいため、中間層コンポーネントに効率よく渡されます。次に、中間層コンポーネントは、ストアド プロシージャを通じて変更のある元のデータ ソースを更新します。次に、中間層は (元のクエリを再び実行することによって) 元のデータとデータ ソースからの最新のデータを含む新しい DataTable を返信するか、データ ソースから変更の加えられたサブセットを返信できます。たとえば、データ ソースが自動的に一意の主キー値を作成する場合、その値はクライアント アプリケーションに反映できます。どちらの場合にも、返された DataTable は、Merge メソッドで、クライアント アプリケーションの元の DataTable にマージできます。
新しいソース DataTable をターゲットにマージする場合、DataRowState 値が Unchanged、Modified、または Deleted であるすべてのソース行が、同じ主キー値を持つターゲット行と照合されます。DataRowState 値が Added のソース行は、新しいソース行と同じ主キー値を持つ新しいターゲット行と照合されます。

次に示すコンソール アプリケーションの例では、行を含む DataTable を作成し、この行の一部のデータを変更して、他の DataTable のデータとのマージを試みます。この例では preserveChanges パラメータのさまざまな動作を示します。
Private Sub DemonstrateMergeTable() ' Demonstrate merging, within and without ' preserving changes. ' In this example, take these actions: ' 1. Create a DataTable (table1) and fill the table with data. ' 2. Create a copy of table1, and modify its data (modifiedTable). ' 3. Modify data in table1. ' 4. Make a copy of table1 (table1Copy). ' 5. Merge the data from modifiedTable into table1 and table1Copy, ' showing the difference between setting the preserveChanges ' parameter to true and false. ' Create a new DataTable. Dim table1 As New DataTable("Items") ' Add two columns to the table: Dim column As New DataColumn("id", GetType(System.Int32)) column.AutoIncrement = True table1.Columns.Add(column) column = New DataColumn("item", GetType(System.String)) table1.Columns.Add(column) ' Set primary key column. table1.PrimaryKey = New DataColumn() {table1.Columns(0)} ' Add some rows. Dim row As DataRow For i As Integer = 0 To 3 row = table1.NewRow() row("item") = "Item " & i table1.Rows.Add(row) Next i ' Accept changes. table1.AcceptChanges() PrintValues(table1, "Original values") ' Using the same schema as the original table, ' modify the data for later merge. Dim modifiedTable As DataTable = table1.Copy() For Each row In modifiedTable.Rows row("item") = row("item").ToString() & " modified" Next modifiedTable.AcceptChanges() ' Change row values, and add a new row: table1.Rows(0)("item") = "New Item 0" table1.Rows(1)("item") = "New Item 1" row = table1.NewRow() row("id") = 4 row("item") = "Item 4" table1.Rows.Add(row) ' Get a copy of the modified data: Dim table1Copy As DataTable = table1.Copy() PrintValues(table1, "Modified and New Values") PrintValues(modifiedTable, "Data to be merged into table1") ' Merge new data into the modified data. table1.Merge(modifiedTable, True) PrintValues(table1, "Merged data (preserve changes)") table1Copy.Merge(modifiedTable, False) PrintValues(modifiedTable, "Merged data (don't preserve changes)") End Sub Private Sub PrintValues(ByVal table As DataTable, _ ByVal label As String) ' Display the values in the supplied DataTable: Console.WriteLine(label) For Each row As DataRow In table.Rows For Each column As DataColumn In table.Columns Console.Write("{0}{1}", ControlChars.Tab, row(column, _ DataRowVersion.Current)) Next column Console.WriteLine() Next row End Sub
private static void DemonstrateMergeTable() { // Demonstrate merging, within and without // preserving changes. // In this example, take these actions: // 1. Create a DataTable (table1) and fill the table with data. // 2. Create a copy of table1, and modify its data (modifiedTable). // 3. Modify data in table1. // 4. Make a copy of table1 (table1Copy). // 5. Merge the data from modifiedTable into table1 and table1Copy, // showing the difference between setting the preserveChanges // parameter to true and false. // Create a new DataTable. DataTable table1 = new DataTable("Items"); // Add two columns to the table: DataColumn column = new DataColumn("id", typeof(System.Int32)); column.AutoIncrement = true; table1.Columns.Add(column); column = new DataColumn("item", typeof(System.String)); table1.Columns.Add(column); // Set primary key column. table1.PrimaryKey = new DataColumn[] { table1.Columns[0] }; // Add some rows. DataRow row; for (int i = 0; i <= 3; i++) { row = table1.NewRow(); row["item"] = "Item " + i; table1.Rows.Add(row); } // Accept changes. table1.AcceptChanges(); PrintValues(table1, "Original values"); // Using the same schema as the original table, // modify the data for later merge. DataTable modifiedTable = table1.Copy(); foreach (DataRow rowModified in modifiedTable.Rows) { rowModified["item"] = rowModified["item"].ToString() + " modified"; } modifiedTable.AcceptChanges(); // Change row values, and add a new row: table1.Rows[0]["item"] = "new Item 0"; table1.Rows[1]["item"] = "new Item 1"; row = table1.NewRow(); row["id"] = 4; row["item"] = "Item 4"; table1.Rows.Add(row); // Get a copy of the modified data: DataTable table1Copy = table1.Copy(); PrintValues(table1, "Modified and new Values"); PrintValues(modifiedTable, "Data to be merged into table1"); // Merge new data into the modified data. table1.Merge(modifiedTable, true); PrintValues(table1, "Merged data (preserve changes)"); table1Copy.Merge(modifiedTable, false); PrintValues(modifiedTable, "Merged data (don't preserve changes)"); } private static void PrintValues(DataTable table, string label) { // Display the values in the supplied DataTable: Console.WriteLine(label); foreach (DataRow row in table.Rows) { foreach (DataColumn column in table.Columns) { Console.Write("\t{0}", row[column, DataRowVersion.Current]); } Console.WriteLine(); } }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


DataTable.Merge メソッド (DataTable, Boolean, MissingSchemaAction)
アセンブリ: System.Data (system.data.dll 内)

Public Sub Merge ( _ table As DataTable, _ preserveChanges As Boolean, _ missingSchemaAction As MissingSchemaAction _ )
Dim instance As DataTable Dim table As DataTable Dim preserveChanges As Boolean Dim missingSchemaAction As MissingSchemaAction instance.Merge(table, preserveChanges, missingSchemaAction)
public void Merge ( DataTable table, bool preserveChanges, MissingSchemaAction missingSchemaAction )
public: void Merge ( DataTable^ table, bool preserveChanges, MissingSchemaAction missingSchemaAction )
public void Merge ( DataTable table, boolean preserveChanges, MissingSchemaAction missingSchemaAction )
public function Merge ( table : DataTable, preserveChanges : boolean, missingSchemaAction : MissingSchemaAction )
- missingSchemaAction
MissingSchemaAction 値の 1 つ。

Merge メソッドを使用して、スキーマがほとんど同様の 2 つの DataTable オブジェクトをマージします。マージは、通常、データ ソースから既存の DataTable に直前の変更を組み込むために、クライアント アプリケーションで使用されます。これにより、クライアント アプリケーションが更新された DataTable と、データ ソースからの最新データを入手できます。
マージ操作では、元のテーブルおよびマージするテーブルだけが考慮されます。子テーブルは影響を受けることも追加されることもありません。テーブルに、リレーションシップの一部として定義された 1 つ以上の子テーブルが存在する場合、各子テーブルを個別にマージする必要があります。
通常、Merge メソッドは、変更の検証、エラーの調整、変更されたデータ ソースの更新、および最後に既存の DataTable の更新に関係する一連のプロシージャの終わりに呼び出されます。
マージを実行すると、preserveChanges パラメータに false が指定されていない限り、マージ操作中はマージの前に既存のデータに加えられた変更が保持されます。preserveChanges パラメータが true に設定されている場合、既存の行の現在の行バージョンにある既存の値は受信された値によって上書きされません。preserveChanges パラメータが false に設定されている場合、既存の行の現在の行バージョンにある既存の値は、受信された値によって上書きされます。行のバージョンの詳細については、「行の状態とバージョン」を参照してください。
クライアント アプリケーションには通常、変更されたデータを収集し、中間層コンポーネントに戻す前に検証するためにクリックできる単一のボタンがあります。このシナリオでは、初めに GetChanges メソッドを呼び出します。このメソッドは、検証とマージのために最適化された 2 番目の DataTable を返します。2 番目の DataTable オブジェクトには、変更された DataTable オブジェクトおよび DataRow オブジェクトだけが含まれ、元の DataTable のサブセットになります。このサブセットは一般的に小さいため、中間層コンポーネントに効率よく渡されます。次に、中間層コンポーネントは、ストアド プロシージャを通じて変更のある元のデータ ソースを更新します。次に、中間層は (元のクエリを再び実行することによって) 元のデータとデータ ソースからの最新のデータを含む新しい DataTable を返信するか、データ ソースから変更の加えられたサブセットを返信できます。たとえば、データ ソースが自動的に一意の主キー値を作成する場合、その値はクライアント アプリケーションに反映できます。どちらの場合にも、返された DataTable は、Merge メソッドで、クライアント アプリケーションの元の DataTable にマージできます。
Merge メソッドが呼び出されたときは、スキーマが変更されている可能性があるため、2 つの DataTable オブジェクトのスキーマが比較されます。たとえば、B to B シナリオでは、自動処理によって新しい列が XML スキーマに追加されていることがあります。ソース DataTable がターゲットに不足しているスキーマ要素 (追加された DataColumn オブジェクト) を格納している場合、そのスキーマ要素は引数 missingSchemaAction を MissingSchemaAction.Add に設定して、ターゲットに追加できます。この場合、マージされた DataTable は、追加されたスキーマとデータを格納します。
新しいソース DataTable をターゲットにマージする場合、DataRowState 値が Unchanged、Modified、または Deleted であるすべてのソース行が、同じ主キー値を持つターゲット行と照合されます。DataRowState 値が Added のソース行は、新しいソース行と同じ主キー値を持つ新しいターゲット行と照合されます。

Merge メソッドの missingSchemaAction パラメータの動作を次のコンソール アプリケーションで示します。この例では同じテーブルを 2 バージョン作成し、2 番目のバージョンのスキーマを変更します。次に、2 番目のテーブルを 1 番目のテーブルにマージします。
Private Sub DemonstrateMergeTable() Dim itemsTable As New DataTable("Items") ' Add columns Dim idColumn As New DataColumn("id", GetType(System.Int32)) Dim itemColumn As New DataColumn("item", GetType(System.Int32)) itemsTable.Columns.Add(idColumn) itemsTable.Columns.Add(itemColumn) ' Set the primary key column. itemsTable.PrimaryKey = New DataColumn() {idColumn} ' Add RowChanged event handler for the table. AddHandler itemsTable.RowChanged, AddressOf Row_Changed ' Add some rows. Dim row As DataRow For i As Integer = 0 To 3 row = itemsTable.NewRow() row("id") = i row("item") = i itemsTable.Rows.Add(row) Next i ' Accept changes. itemsTable.AcceptChanges() PrintValues(itemsTable, "Original values") ' Create a second DataTable identical to the first. Dim itemsClone As DataTable = itemsTable.Clone() ' Add column to the second column, so that the ' schemas no longer match. itemsClone.Columns.Add("newColumn", GetType(System.String)) ' Add three rows. Note that the id column can't be the ' same as existing rows in the original table. row = itemsClone.NewRow() row("id") = 14 row("item") = 774 row("newColumn") = "new column 1" itemsClone.Rows.Add(row) row = itemsClone.NewRow() row("id") = 12 row("item") = 555 row("newColumn") = "new column 2" itemsClone.Rows.Add(row) row = itemsClone.NewRow() row("id") = 13 row("item") = 665 row("newColumn") = "new column 3" itemsClone.Rows.Add(row) ' Merge itemsClone into the itemsTable. Console.WriteLine("Merging") itemsTable.Merge(itemsClone, False, MissingSchemaAction.Add) PrintValues(itemsTable, "Merged With itemsTable, Schema added") End Sub Private Sub Row_Changed(ByVal sender As Object, _ ByVal e As DataRowChangeEventArgs) Console.WriteLine("Row changed {0}{1}{2}", _ e.Action, ControlChars.Tab, e.Row.ItemArray(0)) End Sub Private Sub PrintValues(ByVal table As DataTable, ByVal label As String) ' Display the values in the supplied DataTable: Console.WriteLine(label) For Each row As DataRow In table.Rows For Each col As DataColumn In table.Columns Console.Write(ControlChars.Tab + " " + row(col).ToString()) Next col Console.WriteLine() Next row End Sub
private static void DemonstrateMergeTable() { DataTable itemsTable = new DataTable("Items"); // Add columns DataColumn idColumn = new DataColumn("id", typeof(System.Int32)); DataColumn itemColumn = new DataColumn("item", typeof(System.Int32)); itemsTable.Columns.Add(idColumn); itemsTable.Columns.Add(itemColumn); // Set the primary key column. itemsTable.PrimaryKey = new DataColumn[] { idColumn }; // Add RowChanged event handler for the table. itemsTable.RowChanged += new System.Data.DataRowChangeEventHandler(Row_Changed); // Add ten rows. DataRow row; for (int i = 0; i <= 9; i++) { row = itemsTable.NewRow(); row["id"] = i; row["item"] = i; itemsTable.Rows.Add(row); } // Accept changes. itemsTable.AcceptChanges(); PrintValues(itemsTable, "Original values"); // Create a second DataTable identical to the first. DataTable itemsClone = itemsTable.Clone(); // Add column to the second column, so that the // schemas no longer match. itemsClone.Columns.Add("newColumn", typeof(System.String)); // Add three rows. Note that the id column can't be the // same as existing rows in the original table. row = itemsClone.NewRow(); row["id"] = 14; row["item"] = 774; row["newColumn"] = "new column 1"; itemsClone.Rows.Add(row); row = itemsClone.NewRow(); row["id"] = 12; row["item"] = 555; row["newColumn"] = "new column 2"; itemsClone.Rows.Add(row); row = itemsClone.NewRow(); row["id"] = 13; row["item"] = 665; row["newColumn"] = "new column 3"; itemsClone.Rows.Add(row); // Merge itemsClone into the itemsTable. Console.WriteLine("Merging"); itemsTable.Merge(itemsClone, false, MissingSchemaAction.Add); PrintValues(itemsTable, "Merged With itemsTable, schema added"); } private static void Row_Changed(object sender, DataRowChangeEventArgs e) { Console.WriteLine("Row changed {0}\t{1}", e.Action, e.Row.ItemArray[0]); } private static void PrintValues(DataTable table, string label) { // Display the values in the supplied DataTable: Console.WriteLine(label); foreach (DataRow row in table.Rows) { foreach (DataColumn col in table.Columns) { Console.Write("\t " + row[col].ToString()); } Console.WriteLine(); } }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。

