ホームページ >バックエンド開発 >C#.Net チュートリアル >DataSet、DataTable、DataRow のコピー メソッド
DataSet オブジェクトは、ADO.NET の切断された分散データ ソリューションをサポートするコア オブジェクトであり、DataTable からデータを取得したり、別の DataTabe からデータをコピーしたりするなど、その中のデータを使用する必要がよくあります。 . DataRow データですが、DataSet と DataTable のコピーのみがディープ コピーをサポートしています。つまり、要素の構造だけでなく要素のデータもコピーできます。ただし、DatatDataRow には関連するコピー メソッドがありません。以下では、これらのデータ要素について簡単に説明します。
DataTable sourceTable;
DatatDataRow objectRow;
DataSet souceDataSet ()
DataSet object = souceDataSet.Copy();
DataSet オブジェクト = souceDataSet.Clone();//浅いコピー、スキーマのみをコピー
Copy DataTable
objectTable = sourceTable .Copy();//深いコピー
objectTable = sourceTable .Clone();//浅いコピー、スキーマのみをコピー
DataRow のコピー
このエラーはプロジェクト開発でよく発生します - 「この行はすでに別のテーブルに属しています」。このエラーを引き起こしたステートメントは次のとおりです:
objectTable .Rows.Add(SourceDataRow);
DataRow DataTable が参照によって呼び出されるため、その理由を分析しました。したがって、行が 1 つのテーブルに追加されると、その行を別のテーブルに追加することはできません。
特定のメソッド:
1 ImportRow メソッド: public void ImportRow( DataRow DataRow);
objectTable = sourceTable.clone();//同じ列またはリレーションシップを持つように、テーブルのスキーマを最初にコピーする必要があります。 (Foreach (dataarow orow in sourcetable) {
objecttable.importrow (orow); // objecttable に新しい行を追加し、Source のソースの値をコピーします。テーブルの構造が必要です。
}
_____________________________________________________________________________
2. DataTable の各列をループします
DataRow aDataRow = objectTable.NewRow();
foreach(DataColumn aDataColumn in sourceTable.Columns)
{
aDataRow [aDataColumn.ColumnName] = sourceTable[i ][aDataColumn. ColumnName];
}
objectTable.Rows.Add(aDataRow);
3. カスタム コピー
objectTable.Columns.Add ("id");//同じ構造にする必要はありません。必要です!
Object [] myArry = new Object [1];
foreach (sourceTable の DataRow oRow)
{ tempRow = objectTable.NewRow();//このメソッドを呼び出す必要があります
myArry[0] = oRow[" id"]; //myArry のソース テーブルに id 列がない場合、エラーが報告されます。
tempRow.ItemArray = myArry; //ItemArray プロパティは、プログラムの必要に応じて複数の列のデータをコピーできます。呼び出す必要があります。そうしないと、DataRow 内のデータが表示されません。
}
_____________________________________________________________________________________
4. LoadDataRow メソッド: public DataRow LoadDataRow(Object[] value,bool fAcceptChanges);
Object[] newRow = new Object[3] ;
// オブジェクト配列の値を設定します
newRow[0] = "World";
DataRow myRow( );
// テーブルに新しい行を追加します
myRow = ObjectTable.LoadDataRow(newRow, true);// 新しい行の追加を示すフラグを true に設定する必要があります
ObjectTable.EndLoadData(); このメソッドは既存の行のデータをコピーして追加する場合は、新しい行を使用しないことをお勧めします。具体的な使用方法については、SDK ドキュメントを参照してください。