質問: ### 前提・実現したいこと C#の DataSet のCopy()メソッド、Clone()メソッドの違いについてあまりとらえきれないのでご質問させていただきました。 ■今の認識 Copy()メソッド ・値も型なども完ぺきなデータセットを返す Clone()メソッド ・値以外をコピーしてデータセットを返す 上記の認識であってますでしょうか? ### 補足情報(FW/ツールのバージョンなど) 言語はC# Windows Formを使用してアプリを作成中です SQLサーバー Microsoft SQL Server 2014 - 12.0.2269.0 (X64) Express Edition (64-bit) on Windows NT 6.3 (Build 17763: ) VisualStudio2017という環境です。
回答: DataSet.Copy ``` public DataSet Copy() { IntPtr hscp; Bid.ScopeEnter(out hscp, " %d#\n", ObjectID); try { DataSet dsNew = Clone(); bool fEnforceConstraints = dsNew.EnforceConstraints; dsNew.EnforceConstraints = false; foreach (DataTable table in this.Tables) { DataTable destTable = dsNew.Tables[table.TableName, table.Namespace]; foreach (DataRow row in table.Rows) table.CopyRow(destTable, row); } dsNew.EnforceConstraints = fEnforceConstraints; return dsNew; } finally { Bid.ScopeLeave(ref hscp); } } ``` DataSet.Copy のソースです。御覧の通り、中で Clone した後、データをコピーしています。 EnforceConstraints はデータの制約を有効にするかどうかを指定するプロパティです。これを無効にしておかないとコピーに失敗することがあるので、一時的に false にしています。制約については「データベース 制約」でググってください。