質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

7964閲覧

C#の DataSet のCopy()メソッド、Clone()メソッドの違いについて

milkwalking

総合スコア60

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/05/21 07:46

編集2019/05/21 07:47

前提・実現したいこと

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 <X64> (Build 17763: )

VisualStudio2017という環境です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetsunosuke

2019/05/21 07:50

質問の趣旨がよくわかりません。 リファレンスには https://docs.microsoft.com/ja-jp/dotnet/api/system.data.dataset.clone?view=netframework-4.8 すべての DataSet スキーマ、リレーションシップ、および制約を含め DataTable の構造体をコピーします。 データのコピーは行いません。 https://docs.microsoft.com/ja-jp/dotnet/api/system.data.dataset.copy?view=netframework-4.8 この DataSet の構造体だけでなくデータもコピーします。 と書いてあるがその意味がわからない、ということでしょうか。(どうわからないか..利用例とか?がわからないのでそれ以上の説明がし辛いかなと思っています)
milkwalking

2019/05/21 08:04

tetsunosuke様 追記のご記入ありがとうございます。 と書いてあるがその意味がわからない、ということでしょうか。 →おっしゃるとおりです。DataSet スキーマ、リレーションシップ、および制約を含め DataTable の構造体が何にあたるのかというのが勉強不足でわからなかったので、利用例や具体的な使い方などから理解できればと思って投稿いたしました。
tetsunosuke

2019/05/21 08:22

適当に検索して拾った動作の違いの例です http://okwakatta.net/code/dst08.html これで、「データのコピーは行いません」の意味はわかりますよね。 <スキーマ・リレーションシップ・制約を含め DataTableの構造体> については(それら一般的な用語に関しての前提知識がどのくらいかわからないのでなんともいえませんが)https://docs.microsoft.com/ja-jp/dotnet/api/system.data.datatable?view=netframework-4.8 こちらに例がいくつか書いてあるので、 テーブルの列定義であったり、DataColumnに対しての制約、あたりについてよく読めば理解できるかもしれません。
guest

回答1

0

ベストアンサー

DataSet.Copy

C#

1public DataSet Copy() 2{ 3 IntPtr hscp; 4 Bid.ScopeEnter(out hscp, "<ds.DataSet.Copy|API> %d#\n", ObjectID); 5 try { 6 DataSet dsNew = Clone(); 7 bool fEnforceConstraints = dsNew.EnforceConstraints; 8 dsNew.EnforceConstraints = false; 9 foreach (DataTable table in this.Tables) 10 { 11 DataTable destTable = dsNew.Tables[table.TableName, table.Namespace]; 12 13 foreach (DataRow row in table.Rows) 14 table.CopyRow(destTable, row); 15 } 16 17 dsNew.EnforceConstraints = fEnforceConstraints; 18 19 return dsNew; 20 } 21 finally { 22 Bid.ScopeLeave(ref hscp); 23 } 24}

DataSet.Copy のソースです。御覧の通り、中で Clone した後、データをコピーしています。

EnforceConstraints はデータの制約を有効にするかどうかを指定するプロパティです。これを無効にしておかないとコピーに失敗することがあるので、一時的に false にしています。制約については「データベース 制約」でググってください。

投稿2019/05/21 07:55

編集2019/05/21 08:05
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

milkwalking

2019/05/21 08:07

Zuishin様 ご回答ありがとうございます。 ソースをみるとクローンしたあとにデータを後でコピーしているんですね、、、 クローンのソースコードもみて、DataSet スキーマ、リレーションシップ、および制約を含め DataTable の構造体についても学習してみます。 今後もよろしくお願いいたします。
Zuishin

2019/05/21 08:10

それらはデータベースの用語なので、データベースについて調べた方が早いと思います。スキーマはテーブルなどの形式、リレーションシップはテーブル同士の関連、制約はデータを変更する際のルールです。DataSet はそれに準じています。
milkwalking

2019/05/22 10:15 編集

Zuishin様 わかりやすすぎる説明までありがとうございます。;; データベースもまだ初心者で本2冊程度しかやってないので、確認させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問