###実現したいことと現状
C#を用い、SQL Serverへデータを問い合わせたその結果を、定義した独自クラスのListに格納したいと考えておりますが、Listへのデータ格納をすることができません。List<T>の使い方も曖昧で、どこで躓いているのかはっきり分からない状況です。
###該当のソースコード
C#
1//独自クラス:Worker.cs 2 public class Worker 3 { 4 private int id { get; set; } //従業員コード 5 private string name { get; set; } //従業員名 6 private DateTime entryDate { get; set; } //入社日 7 }
C#
1//DatabaseConnectionHelper.cs 2 //途中省略 3 public SqlDataReader DatabaseConnect() 4 { 5 SqlConnection cn = new SqlConnection(); 6 SqlCommand command = new SqlCommand(); 7 8 cn.ConnectionString = DB_CONNECTION_STRING; 9 command.Connection = cn; 10 command.CommandText = SqlString; 11 12 //Readerに問い合わせ結果を格納 13 var reader = command.ExecuteReader(); 14 15 //データベースサーバから返却された生データを返却 16 return reader; 17 }
C#
1//SQLConroller.cs 2 List <Worker> worker = new List<Worker>(); 3 SqlDataReader reader = helper.DatabaseConnect(); 4 5 //ここから先の見当がつきません 6
worker.add(Reader.GetValue(i)) は明らかに見当違いだと思い、
worker.add(Reader.GetValues()) を使ってみましたが、型が違うと怒られました。
無理やりキャストも試しましたが、案の定キャストに失敗しております。
DataGridViewに問い合わせ結果を格納する以外の手法を行ったことがなく、また独自クラスを使用したListの使い方も分からない状況です。
大変初歩的な質問で恐縮ですが、ご回答の程お願い致します。
###補足(2017-07-28)
ベストアンサーの方の方法だけでは変換時に例外が吐かれてしまったため、以下のようにすることで回避できました。この記事を見る方がいらっしゃいましたら、参考になると幸いです。
C#
1workerId = int.Parse(reader.GetValue(0).ToString()); 2name = (string)reader.GetValue(1); 3entryDate = DateTime.Parse(reader.GetValue(2).ToString()); 4workerType = reader.GetValue(3).ToString(); 5worker.Add(new Worker(workerId, name, entryDate, workerType));
GetValueはObject型を返却するらしく、それを一旦string型に変換、さらに各型にパースするという手順を踏んでまいります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/28 02:39
2017/07/28 07:20
退会済みユーザー
2017/07/29 15:56