トップページ > プログラム > 2015年09月12日 > 2/bkKms1

書き込み順位&時間帯一覧

18 位/167 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000002103



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
ふらっと C#,C♯,C#(初心者用) Part116 [転載禁止]©2ch.net

書き込みレス一覧

ふらっと C#,C♯,C#(初心者用) Part116 [転載禁止]©2ch.net
674 :デフォルトの名無しさん[sage]:2015/09/12(土) 21:02:49.37 ID:2/bkKms1
失礼します。少し長いのですがよろしくお願いします。
C/S型のアプリケーションで「DBから特定のテーブルの内容を読み込む」機能を作成しているのですが、
以下のように記述して問題ないか意見を聞かせてください。
環境は「VS2008」「.NET Framework2.0」「SqlServer2008R2」を使用してます。
(.NET Frameworkのバージョンが古いのですがこれは変更できません・・・)

public List<SampleRecClass> ReadData() {
  string sqlStr = "SELECT id, name ... FROM SampleTable";
  SqlConnection conn = new SqlConnection(省略);
  SqlCommand cmd = new SqlCommand(sqlStr, conn);
  conn.Open();
  SqlDataReader dr = cmd.ExecuteReader();

  List<SampleRecClass> list = List<SampleRecClass>();
※ Type ti = typeof(SampleRecClass);
※ PropertyInfo pi;
  SampleRecClass data; // [SampleRecClass]は[SampleTable]の項目と名前・型が同じプロパティを持つ
  while (dr.Read()) { // データの取得にリフレクションを利用する
    data = new SampleRecClass;
※   for(int i = 0; i < dr.FieldCount; i++){
※     pi = ti.GetProperty(dr.GetName(i));
※     if(pi != null){ pi.SetValue(data, dr.GetValue(i), null); }
※   }
    list.Add(data);
  }
  dr.Close();
  conn.Close();
  return list;
}
長いので分割します
ふらっと C#,C♯,C#(初心者用) Part116 [転載禁止]©2ch.net
675 :デフォルトの名無しさん[sage]:2015/09/12(土) 21:03:54.91 ID:2/bkKms1
直す前の該当箇所のコードは以下のようになっています。
  while (dr.Read()) {
    data = new SampleRecClass;
    data.id = (int)dr["id"];
    data.name = (string)dr["name"];
    // (省略) data.項目名 = (型)dr["項目名"]が100行くらい続く
    list.Add(data);
  }
気になったのは「data.項目名 = (int)dr["項目名"];」が大量に存在することで、
また、似たようなメソッドをもつクラスが数多く実装されています。

テーブル内容を格納するクラス(サンプルではSampleRecClass)にはテーブルの項目と名前・型が
同じプロパティが存在することからリフレクションを利用すればコードを短く出来るのではないかと考えました。
Select件数は機能によりまちまちで1件の場合もあれば数千となる場合もあります。
一応データの取得自体には成功しているのですが、まわりに熟練した方がおらず、
これはやめたほうが良い、機能追加時に困るなどのご意見をお聞きしたいです。
よろしくお願いします。
ふらっと C#,C♯,C#(初心者用) Part116 [転載禁止]©2ch.net
678 :デフォルトの名無しさん[sage]:2015/09/12(土) 22:12:03.95 ID:2/bkKms1
>>676-677
ありがとうございます。やはりSELECT項目が増えるたびに追加していくのは微妙ですよね。

dapperというのを初めて知りました。やりたいことにものすごい近い気がします。
できればこういうのを導入したいのですが環境に手を加えるのをものすごく嫌がる職場なので説得が必要かも・・・


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。