質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

1回答

24604閲覧

データベースへの問い合わせ結果を独自クラスのListに格納したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

1クリップ

投稿2017/07/26 07:41

編集2017/07/28 02:44

###実現したいことと現状
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型に変換、さらに各型にパースするという手順を踏んでまいります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

とりあえずSQLConroller.csにて、格納方法です

//フィールドなどで事前にid,name,entrydateの変数を定義しておく(割愛) List<Worker> worker = new List<Worker>(); command = connection.CreateCommand(); command.Connection = connection; command.CommandText = @"SELECT * from table_name;";//SQL文 var reader = command.ExecuteReader(); while (reader.Read()) { id = (string)reader.GetValue(0); name = (string)reader.GetValue(1); entrydate = (Datetime)reader.GetValue(2); worker.Add(new Worker(id,name,entrydate)); } reader.Close();

投稿2017/07/26 07:56

ygoooo

総合スコア71

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/28 02:39

ご回答ありがとうございました、助かりました!
ygoooo

2017/07/28 07:20

すみません、DateTimeのことをまったく考えず回答してしまいました。 完全なレビュー不足です。 ですがご自身で解決されたそうで、なによりです。
退会済みユーザー

退会済みユーザー

2017/07/29 15:56

ygoooo様 格納の方法がわからなければ、変換もできていませんので、ご自身を責めないでください。本件の回答には本当に感謝しております、本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問