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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

1489閲覧

datatableの値がうまく入らない

yamaguti

総合スコア185

C#

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/10/21 16:22

お世話になります。

とある編集画面を実装中なのですが、datatableにはいっている特定の列の値を取得して
テキストボックス等に入れ込みたいのですが、空になってしまいます。
どうしてでしょうか。具体的には、コード部分の46行目~48行目です。
ブレイクポイントを直前にはっても変数には正しく値が入っているのですが、、
ご教示の程宜しくお願い致します。

C#

1 public partial class KabuTouroku2 : Form 2 { 3 private kabu kabu = null; 4 5 public KabuTouroku2(kabu kabu) 6 { 7 InitializeComponent(); 8 9 this.kabu = (kabu)kabu; 10 //新規モードで入ったか、編集モードか判断 11 12 //編集モードの場合 13 if (this.kabu.id != "") 14 { 15 //idを取得 16 var a = this.kabu.id; 17 18 //DB接続等 19 string dbPath = Application.StartupPath + @"\kabukanri.db"; 20 using (SQLiteConnection con = new SQLiteConnection("Data Source=" + dbPath)) 21 { 22 #region 編集モードの場合の初期表示クエリ 23 DataTable datatable = new DataTable(); 24 StringBuilder hensyu = new StringBuilder(); 25 26 SQLiteCommand cmd = con.CreateCommand(); 27 hensyu.AppendLine("select"); 28 hensyu.AppendLine(" * "); 29 hensyu.AppendLine("from"); 30 hensyu.AppendLine(" 損益テーブル "); 31 hensyu.AppendLine("where"); 32 hensyu.AppendLine(" ID = :ID"); 33 34 cmd.Parameters.Add("ID", System.Data.DbType.String); 35 36 cmd.Parameters["ID"].Value = a; 37 38 cmd.CommandText = hensyu.ToString(); 39 var b = new SQLiteDataAdapter(cmd); 40 b.Fill(datatable); 41 42 DataView dv = new DataView(datatable); 43 DataTable dt = dv.ToTable(false, "日付"); 44 DataTable dt2 = dv.ToTable(false, "損益額"); 45 //日付 46 dateTimePicker1.Text = dt.ToString(); 47 //損益額 48 txtsoneki.Text = dt2.ToString(); 49 50 } 51 #endregion 52 } 53 //新規モードの場合 54 else 55 { 56 57 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

少しコードが混乱している様子です。

もしかしたらご質問の意図をつかみ損ねているかもしれませんが、datatableに取得したSELECTの結果セットからカラム「日付」「損益額」の値を取得して表示したい、と言うことで合っているのであれば、以下のようになるかと。

C#

1 cmd.CommandText = hensyu.ToString(); 2 var b = new SQLiteDataAdapter(cmd); 3 b.Fill(datatable); 4 5 string id = ""; 6 string hiduke = ""; 7 long sonekigaku = 0; 8 9 // SELECTの結果セットが1件以上の場合、各カラムの値を取得 10 if (datatable.Rows.Count > 0) 11 { 12 DataRow row = datatable.Rows[0]; 13 id = row.Field<string>("ID"); 14 hiduke = row.Field<string>("日付"); 15 16 // 損益額カラムはINTEGER を前提 17 sonekigaku = row.Field<long>("損益額"); 18 19 // 確認の為Debug.WriteLine()で出力してみる。 20 string msg = string.Format("ID={0}, 日付={1}, 損益額={2}", id, hiduke, sonekigaku); 21 Debug.WriteLine("Row: " + msg); 22 } 23 24 //日付 25 dateTimePicker1.Text = hiduke; 26 //損益額 27 txtsoneki.Text = sonekigaku.ToString();

DataViewは必要ありません。b.Fill(datatable)で取得した結果セットの中の最初のRowを取得して、そこから「日付」「損益額」のカラムの値を取り出します。お使いのSQLite3データベースの「損益テーブル」の構成が分かりませんでしたので以下のようなテーブルを想定しています。

SQL

1CREATE TABLE 損益テーブル (ID TEXT, 日付 TEXT, 損益額 INTEGER);

DataRow.Fieldメソッドを実行している部分(row.Field<long>("損益額")等)は、それぞれのカラムの型を意識して合わせないといけませんのでご注意ください。

投稿2017/10/22 08:22

dodox86

総合スコア9183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問