C#.NETのサンプルコードを掲載しています。
      
SELECT文でデータを取得する(DataAdapter) 2。
前回はデータベースから取得したデータをDataSetに格納するサンプルでした。
今回はDataTableの指定した領域にデータベースから取得した値を格納する
サンプルです。
まず、データベースのカラム名とDataTableの列の関連付けからはじめます。
関連付けはTableMappingsプロパティとColumnMappingプロパティを使います。
その後、DataAdapterのMissingMappingActionプロパティにIgnoreを設定します。
設定すると関連付けた項目(ここではidとname)だけ格納できます。

 DataReader

テストコード
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


private void Test()
{
    // DataAdapter欲しい列だけ取得するサンプル
    SqlConnection connection = new SqlConnection();
    SqlCommand command = new SqlCommand();
    DataTable dt = new DataTable("dt_m_syouhin");

    // 列を定義します。
    dt.Columns.Add("dt_id", typeof(string));
    dt.Columns.Add("dt_name", typeof(string));
    dt.Columns.Add("dt_value", typeof(int));
    dt.Columns.Add("dt_comment", typeof(string));

    // 接続文字列を設定します。
    connection.ConnectionString = @"Data Source=PC\SQLEXPRESS1;Initial Catalog=TestDatabase;User Id=sa;Password=sa;";

    using (SqlDataAdapter adapter = new SqlDataAdapter())
    {
        command.Connection = connection;
        command.CommandText = "SELECT * FROM m_syouhin";
        adapter.SelectCommand = command;

        // データソース(データベース)とDataTableの関連付けを行います。
        adapter.TableMappings.Add("m_syouhin", "dt_m_syouhin");
        adapter.TableMappings["m_syouhin"].ColumnMappings.Add("id", "dt_id");
        adapter.TableMappings["m_syouhin"].ColumnMappings.Add("name", "dt_name");
        //adapter.TableMappings["m_syouhin"].ColumnMappings.Add("value", "value");

        // DataSetオブジェクトに存在しない列またはテーブルを無視します。
        adapter.MissingMappingAction = MissingMappingAction.Ignore;

        // SQLを実行し結果をDataTableの中に格納します。
        adapter.Fill(dt);
    }
}




関連付けたdt_idとdt_nameだけ値が入ってることが確認できます。
 DataReader

Ignore以外にPassthroughErrorがあります。
PassthroughはDataTableに存在しない列をデータソースの名前で追加し、その列に
値を設定します。このサンプルだとdt_comment列の後ろにvalue列が追加されるイメージです。
Errorは関連付けを行っていない場合、SystemExceptionをスローします。
このサンプルだとvalueとdt_valueの関連付けを行っていません。
そのため、Fill()を行ったときに例外が発生します。関連付けたら問題ありません。

      






Copyright (C) 2011 - 2017 猫の気ままなC#日記