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

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

新規登録して質問してみよう
ただいま回答率
85.50%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

1595閲覧

datatableへの行追加について

koji2017

総合スコア30

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/07/29 13:14

編集2018/07/30 11:42

datatableに行追加後に
行にNothingを設定した場合も
datatableに必ず行のデータは残るのでしょうか?

実際に動かすと残るようですがこれは正しい動きなのでしょうか?
データが残ることは保証されているのでしょうか。

よろしくお願いします。

VB.Net

1Dim row As DataRow = dt.NewRow() 2dt.Rows.Add(row) 3row("C1") = "aa" 4row("C2") = "bb" 5 6row = nothing

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

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

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

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

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

YAmaGNZ

2018/07/30 00:25

どのようなテストをされたのかコードを示してください。
koji2017

2018/07/30 11:43

コードを追記しました。失礼しました。
guest

回答2

0

ベストアンサー

DataTableをdt, DataRowをdrとして、以下のようなことを行っているのでしょうか?

VB.Net

1dt.Rows.Add(dr) 2dr = Nothing

もしこの通りであるのならば、drという変数自体はNothingにはなっていますが、(DataTable)dtに追加した行データ(Nothing前にdrが指示していたデータ)はそのまま残っています。
「dr = Nothing」を行うことにより、現在のdr変数が指し示すアドレスとdt.Rows.Add(dr)で(DataTable)dtに追加したDataRowが指し示すアドレスが同じではなくなっています(つまり別物)。

ただし、「dr = Nothing」とするのではなく、dr変数が指し示すデータの中身を変更すると、(DataTable)dtに追加したDataRowの中身も変わります。

これらをより理解するためには、DataRowのような参照型変数がどのようなものかを理解することが必要です。

◆値型と参照型
https://msdn.microsoft.com/ja-jp/library/cc406735.aspx

そもそも、DataTable内のDataRowはNothingにすることもできなければ、NothingのDataRowを追加することもできません。

...と色々と書きましたが、質問の意図に合っていますでしょうか?

投稿2018/07/30 07:16

kenshirou

総合スコア772

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

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

koji2017

2018/07/30 11:45

ありがとうございます! Nothingを設定してもデータが消えるわけではなくアドレスが消えるだけ、 ということなのですね。
guest

0

kenshirouさんの回答とほぼ同じ内容となります。

dt.NewRow()が実行されると、メモリ上のある場所に1行分の行データを格納する場所が確保されます。
そして、rowに「ここにあります」と、その確保された場所の参照情報が格納されます。

dt.Rows.Add(row)が実行されると、dtの行データを管理している場所に、rowに格納されている情報と同じ、「ここにあります」という参照情報が格納されます。

そして、rowにNothingを代入すると、rowに格納されていた「ここにあります」という情報が消されます。
「ここにあります」という参照情報が消されるだけで、実際に行のデータを格納する場所が消されるわけではありません。

では、いつ実際に行データが格納されている場所が消されるかというと、「ここにあります」と参照している参照情報が全部無くなった時に消されます。
DataTableですと、Remove等で行を消した時に「ここにあります」という参照が消されることになります。

投稿2018/07/30 14:21

YAmaGNZ

総合スコア10222

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

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

koji2017

2018/07/30 22:23

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問