Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
JSONデータをDataTableに格納したい
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30599#CommentId84454
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2021/4/16 20:56:30
まずは最初の例から。
> Dim tbl As New DataTable()
grouplist を列挙して、fruit, aminal, flower 用に、それぞれの別の DataTable を作成しています。
このループ処理により、下記の 3 つのテーブルが生成されます。
🍎🍌🍓 🐶😺🐰 🌹💐🌼
┏━┯━━━┓┏━┯━━━┓┏━┯━━━┓
┃ID│fruit ┃┃ID│animal┃┃ID│flower┃
┣━┿━━━┫┣━┿━━━┫┣━┿━━━┫
┃ 0│リンゴ┃┃ 0│イヌ ┃┃ 0│バラ ┃
┃ 1│バナナ┃┃ 1│ネコ ┃┃ 1│ユリ ┃
┃ 2│イチゴ┃┃ 2│ウサギ┃┃ 2│キク ┃
┗━┷━━━┛┗━┷━━━┛┗━┷━━━┛
『ID』列が追加されていますが、これはテーブルの各行を識別するための「主キー」です。
これは、下記のコードで生成されています。
> tbl.Columns.Add("ID", GetType(Long)).AutoIncrement = True
> tbl.PrimaryKey = New DataColumn() {tbl.Columns(0)}
ID 列の値は自分で代入していっても良いのですが、ここでは AutoIncrement を
用いてます。これを使うと、新しい行が追加されるたびに自動採番してくれます。
> jsonDataTable.Merge(tbl, False, MissingSchemaAction.AddWithKey)
作成されたテーブルは、jsonDataTable にマージしていき、下記の表を作ります。
Merge メソッドに指定してある AddWithKey が肝となっており、これによって
主キーが一致するデータを同一行とみなして結合してくれます。
┏━┯━━━┯━━━┯━━━┓
┃ID│fruit │animal│flower┃
┣━┿━━━┿━━━┿━━━┫
┃ 0│リンゴ│イヌ │バラ ┃
┃ 1│バナナ│ネコ │ユリ ┃
┃ 2│イチゴ│ウサギ│キク ┃
┗━┷━━━┷━━━┷━━━┛
> jsonDataTable.PrimaryKey = Nothing
> jsonDataTable.Columns.RemoveAt(0)
最終結果に ID 列は不要なので、最後に取り除きます。
削除前には、PrimaryKey としての割り当てを解除しておく必要があります。