HUSKING - kotteri

技術系Note

【C#】DbDataReaderの値をモデルクラスに詰める

ODP.NETなどでExecuteReaderで取得した値をモデルクラスに詰め込みたいときに作ったメソッド。

メソッド

public static T GetColumns<T>(this DbDataReader reader)
{
    var record = Activator.CreateInstance<T>();
    foreach (var property in record.GetType().GetProperties())
    {
        object value = reader[property.Name];
        if (!DBNull.Value.Equals(value))
        {
            property.SetValue(record, value);
        }
    }
    return record;
}

使い方

DBのテーブル定義に合わせたモデルクラスを用意

※プロパティ名をテーブルカラム名に合わせる必要あり

public class Person
{
    public string NAME { get; set; }
    public int AGE { get; set; }
}
使用例

※Readerの部分だけを抜粋

cmd.CommandText = "SELECT * FROM Person";
var result = new List<Person>();
using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        // 作成したメソッドを利用してreaderの値を取得
        result.Add(reader.GetColumns<Person>());
    }
}