サンプル集  >  C#  >  DataSetとDataTable
DataSetとDataTable
2019/06/17

DataSetとDataTableを使ってみます。

◆環境
OS Windows 7 Professional Service Pack 1 64bit
C# 01018-587-4054026-70893

以下の手順を行います。

  1. [ファイル]-[新規作成]-[プロジェクト]を選択します。
  2. [Visual C#]を選択し、[Windows コンソール アプリケーション]を選択します。
    「プロジェクト名」は「DataSetTest」にします。

プロジェクトを右クリックし[追加]-[新しい項目]を選択します。
「データセット」を選択し、名前はITEM.xsdにします。

ツールボックスを開き、DataTableをドラッグ&ドロップします。


テーブル名を「ITEM」に変更し、「ITEM_CODE」と「ITEM_NAME」の2つのカラムを追加します。

もう1つデータセットを追加します。

プロジェクトを右クリックし[追加]-[新しい項目]を選択します。
「データセット」を選択し、名前はTRN.xsdにします。

テーブル名を「TRN」に変更し、「TRN_NMBR」「ITEM_CODE」「AMOUNT」の3つのカラムを追加します。

DataSetに2つのDataTableを追加しデータを検索してみます。

Program.cs
  1: 
  2: 
  3: 
  4: 
  5: 
  6: 
  7: 
  8: 
  9: 
 10: 
 11: 
 12: 
 13: 
 14: 
 15: 
 16: 
 17: 
 18: 
 19: 
 20: 
 21: 
 22: 
 23: 
 24: 
 25: 
 26: 
 27: 
 28: 
 29: 
 30: 
 31: 
 32: 
 33: 
 34: 
 35: 
 36: 
 37: 
 38: 
 39: 
 40: 
 41: 
 42: 
 43: 
 44: 
 45: 
 46: 
 47: 
 48: 
 49: 
 50: 
 51: 
 52: 
 53: 
 54: 
 55: 
 56: 
 57: 
 58: 
 59: 
 60: 
 61: 
 62: 
 63: 
 64: 
 65: 
 66: 
 67: 
 68: 
 69: 
 70: 
 71: 
 72: 
 73: 
 74: 
 75: 
 76: 
 77: 
 78: 
 79: 
 80: 
 81: 
 82: 
 83: 
 84: 
 85: 
 86: 
 87: 
 88: 
 89: 
 90: 
 91: 
 92: 
 93: 
 94: 
 95: 
 96: 
 97: 
 98: 
 99: 
100: 
101: 
102: 
103: 
104: 
105: 
106: 
107: 
108: 
109: 
110: 
111: 
112: 
113: 
114: 
115: 
116: 
117: 
118: 
119: 
120: 
121: 
122: 
123: 
124: 
125: 
126: 
127: 
128: 
129: 
130: 
131: 
132: 
133: 
134: 
135: 
136: 
137: 
138: 
139: 
140: 
141: 
142: 
143: 
144: 
145: 
146: 
147: 
148: 
149: 
150: 
151: 
152: 
153: 
154: 
155: 
156: 
157: 
158: 
159: 
160: 
161: 
162: 
163: 
164: 
165: 
166: 
167: 
168: 
169: 
170: 
171: 
172: 
173: 
174: 
175: 
176: 
177: 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace DataSetTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // 商品
            ITEM.ITEMDataTable item = getItemTbl();

            // 取引
            TRN.TRNDataTable trn = getTrnTbl();

            DataSet ds = new DataSet();

            // 商品をDataSetに追加
            ds.Tables.Add(item);
            ds.Tables[ds.Tables.Count - 1].TableName = "ITEM";

            // 取引をDataSetに追加
            ds.Tables.Add(trn);
            ds.Tables[ds.Tables.Count - 1].TableName = "TRN";

            // 商品と取引のリレーションを設定
            ds.Relations.Add("TRN"
                , ds.Tables["ITEM"].Columns["ITEM_CODE"]
                , ds.Tables["TRN"].Columns["ITEM_CODE"]
                , false);

            // DataSetの内容を表示
            DatasetDump(ds);

            // ITEM_CODEが001のITEMを表示
            Console.WriteLine("ITEM_CODEが001のITEMを表示");
            foreach (var item_row in item.Where(r => {
                return (r.ITEM_CODE == "001");
            }))
            {
                Console.WriteLine("{0} {1}"
                                 , item_row.ITEM_CODE
                                 , item_row.ITEM_NAME
                                 );
            }
            Console.WriteLine("");

            // ITEM_CODEが001のTRNを表示
            Console.WriteLine("ITEM_CODEが001のTRNを表示");
            foreach (var trn_row in trn.Where(r =>
            {
                return (r.ITEM_CODE == "001");
            }))
            {
                Console.WriteLine("{0} {1} {2}"
                                 , trn_row.TRN_NMBR
                                 , trn_row.ITEM_CODE
                                 , trn_row.AMOUNT
                                 );
            }
            Console.WriteLine("");

            // ITEM_CODEが001でAMOUNTが150未満のTRNを表示
            Console.WriteLine("ITEM_CODEが001でAMOUNTが"
                             +"150未満のTRNを表示"
                             );
            foreach (var trn_row in trn.Where(r =>
            {
                return (r.ITEM_CODE == "001"
                     && r.AMOUNT < 150
                       );
            }))
            {
                Console.WriteLine("{0} {1} {2}"
                                 , trn_row.TRN_NMBR
                                 , trn_row.ITEM_CODE
                                 , trn_row.AMOUNT
                                 );
            }
            Console.WriteLine("");

            Console.ReadLine();
        }

        static ITEM.ITEMDataTable getItemTbl()
        {
            ITEM.ITEMDataTable tbl = new ITEM.ITEMDataTable();

            ITEM.ITEMRow row = tbl.NewITEMRow();
            row.ITEM_CODE = "001";
            row.ITEM_NAME = "水";
            tbl.AddITEMRow(row);

            row = tbl.NewITEMRow();
            row.ITEM_CODE = "002";
            row.ITEM_NAME = "お弁当";
            tbl.AddITEMRow(row);

            row = tbl.NewITEMRow();
            row.ITEM_CODE = "003";
            row.ITEM_NAME = "ラーメン";
            tbl.AddITEMRow(row);

            return tbl;
        }

        static TRN.TRNDataTable getTrnTbl()
        {
            TRN.TRNDataTable tbl = new TRN.TRNDataTable();

            TRN.TRNRow row = tbl.NewTRNRow();
            row.TRN_NMBR = 1;
            row.ITEM_CODE = "001";
            row.AMOUNT = 120;
            tbl.AddTRNRow(row);

            row = tbl.NewTRNRow();
            row.TRN_NMBR = 2;
            row.ITEM_CODE = "002";
            row.AMOUNT = 500;
            tbl.AddTRNRow(row);

            row = tbl.NewTRNRow();
            row.TRN_NMBR = 3;
            row.ITEM_CODE = "003";
            row.AMOUNT = 680;
            tbl.AddTRNRow(row);

            row = tbl.NewTRNRow();
            row.TRN_NMBR = 4;
            row.ITEM_CODE = "001";
            row.AMOUNT = 125;
            tbl.AddTRNRow(row);

            row = tbl.NewTRNRow();
            row.TRN_NMBR = 5;
            row.ITEM_CODE = "001";
            row.AMOUNT = 150;
            tbl.AddTRNRow(row);

            return tbl;
        }

        public static void DatasetDump(DataSet ds)
        {
            int i;
            foreach (DataTable tbl in ds.Tables)
            {
                Console.WriteLine("TableName:{0}"
                                 ,tbl.TableName
                                 );
                for (i = 0; i < tbl.Columns.Count; i++)
                {
                    Console.Write("{0} | "
                                 ,tbl.Columns[i].ColumnName
                                 );
                }
                Console.WriteLine("");
                foreach (DataRow dr in tbl.Rows)
                {
                    for (i = 0; i < dr.ItemArray.Length; i++)
                    {
                        Console.Write("{0} | "
                                     , dr[i].ToString()
                                     );
                    }
                    Console.WriteLine("");
                }
                Console.WriteLine("");
            }
            Console.WriteLine("");
        }
    }
}

実行してみます。

TableName:ITEM
ITEM_CODE | ITEM_NAME |
001 | 水 |
002 | お弁当 |
003 | ラーメン |

TableName:TRN
TRN_NMBR | ITEM_CODE | AMOUNT |
1 | 001 | 120 |
2 | 002 | 500 |
3 | 003 | 680 |
4 | 001 | 125 |
5 | 001 | 150 |


ITEM_CODEが001のITEMを表示
001 水

ITEM_CODEが001のTRNを表示
1 001 120
4 001 125
5 001 150

ITEM_CODEが001でAMOUNTが150未満のTRNを表示
1 001 120
4 001 125

正常に動作しました。

▲ PageTop  ■ Home


Copyright (C) 2019 ymlib.com