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

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

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

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

5回答

13986閲覧

C# DataTableに読み込んだデータがない

k_mail

総合スコア90

C#

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

1クリップ

投稿2018/12/15 00:30

編集2018/12/15 00:56

タイトル悪いと思います。

C# で SQL Server から SELECT文 の 実行結果 を 取得する 方法
上記のサイトを参考に
C#でデータベースに接続し、データを取得したいです。
予想では、
adapter.Fill(table);
のtable内にデータがあるのかなと思ったのですが、
特に対象と思われるデータがありませんでした。

お手数をお掛け致しますが、
どのようにすれば、データを取得できるかご教示頂きたいです。
(テーブルの情報をどこかにArryリストとして保持しているのかなと思っていたのですが違うようです。。)

[運送会社]テーブル
|運送コード|運送会社|電話番号|
|1 |アカネコ|(03) 3955-98xx|
|2 |トマト |(03) 3681-31xx|
|3 |ペンギン |(03) 3566-99xx|

【画像です。】
行数は確認できるがデータ内容が確認できない

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.Data; 7using System.Data.SqlClient; 8using System.Configuration; 9 10namespace チュートリアル_ 11{ 12 class DBConect 13 { 14 //まとめて読み込む (DataTable) 15 public DataTable GetData() 16 { 17 var table = new DataTable(); 18 19 // 接続文字列の取得 20 var connectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString; 21 22 using (var connection = new SqlConnection(connectionString)) 23 using (var command = connection.CreateCommand()) 24 { 25 try 26 { 27 // データベースの接続開始 28 connection.Open(); 29 30 //http://lifesiz.com/adsense/?p=30 31 // SQLの設定 32 command.CommandText = @"use POSDB SELECT * FROM 運送会社"; 33 34 // SQLの実行 35 var adapter = new SqlDataAdapter(command); 36 adapter.Fill(table); 37 } 38 catch (Exception exception) 39 { 40 Console.WriteLine(exception.Message); 41 throw; 42 } 43 finally 44 { 45 // データベースの接続終了 46 connection.Close(); 47 } 48 } 49 50 return table; 51 } 52 } 53} 54

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

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

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

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

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

Zuishin

2018/12/15 02:31

他の回答のコメントで話があちこちに飛んでいますが、データがどこにあるかという質問ではないのですか? Rows を知っていたなら質問に最初から書いてください。この質問の書き方だと知らないようにしか見えません。
退会済みユーザー

退会済みユーザー

2018/12/15 02:40

どこを見て「特に対象と思われるデータがありませんでした。」と言ってますか? 質問の画像にあるようにDataTable.Rows.Count で 3 となっているから、3 行取得できたのは間違いないのですが????
k_mail

2018/12/15 05:05

他の回答のコメントで話があちこちに飛んでいますが、データがどこにあるかという質問ではないのですか? ⇒はい。カーソルを変数などにあててデータを見ることができたらいいなと思いました。 Rows を知っていたなら質問に最初から書いてください。この質問の書き方だと知らないようにしか見えません。 ⇒Rowsは存じあげませんでした。  Zuishinさんのコメントを拝見し知り、実行してみました。  ありがとうございました。 ~~~~~~~~~~~~~~~~~~~~ どこを見て「特に対象と思われるデータがありませんでした。」と言ってますか? 質問の画像にあるようにDataTable.Rows.Count で 3 となっているから、3 行取得できたのは間違いないのですが???? ⇒データの中身をどこかのオブジェクトか変数にもっていくと、データの値を見ることができるのかなと思っていました。  Rowsは、行数しかできないんですね。  データまで、見るのはちょっと調べてみます。  ありがとうございました。
Zuishin

2018/12/15 05:11

Rows のある次の行にブレークポイントを設定し、止まったところで Rows をポイントすれば中のデータを見ることができます。
退会済みユーザー

退会済みユーザー

2018/12/15 05:51

> データの中身をどこかのオブジェクトか変数にもっていくと、データの値を見ることができるのかなと思っていました。 デバッガで見たいのであれば DataTable を開いて Rows を開いて「結果ビュー」を開くと見ることができると思います。後で調べて画像を貼っておきます。
k_mail

2018/12/15 06:37

Zuishinさん SurferOnWwwさん 中身見ることができました!! お付き合い頂きありがとうございました。
guest

回答5

0

ベストアンサー

目で見たいということであれば DataTable を DataGridView にバインドして表示してはいかがでしょう?

以下のようなコードで、

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; namespace WindowsFormsApplication1 { public partial class Form8 : Form { private DataGridView dataGridView1; private BindingSource bindingSource1; public Form8() { InitializeComponent(); this.dataGridView1 = new DataGridView(); this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; this.bindingSource1 = new BindingSource(); this.dataGridView1.DataSource = this.bindingSource1; this.Controls.Add(this.dataGridView1); this.bindingSource1.DataSource = GetEmployeeDataTable(); } private DataTable GetEmployeeDataTable() { string connString = @"Data Source=(local)\sqlexpress;Initial Catalog=NORTHWIND;Integrated Security=True"; string query = "SELECT [EmployeeID],[LastName],[FirstName],[Address] FROM [Employees]"; DataTable table = new DataTable(); using (SqlConnection connection = new SqlConnection(connString)) { using (SqlCommand command = new SqlCommand(query, connection)) { SqlDataAdapter adapter = new SqlDataAdapter(command); adapter.Fill(table); } } return table; } } }

以下の結果になります。

イメージ説明

表題とは直接関係ない話ですが、DataAdapter.Fill メソッドを使う場合は Open, Close は書かなくても OK です。

【追伸】

質問に対する 2018/12/15 14:51 の私のコメントで「デバッガで見たいのであれば DataTable を開いて Rows を開いて「結果ビュー」を開くと見ることができると思います。後で調べて画像を貼っておきます」と書きましたが、その画像を以下に貼っておきます。お試しください。

イメージ説明

投稿2018/12/15 02:20

編集2018/12/15 05:55
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

解決済みの質問でなんですが、回答への返答などを見ていると多分やりたかったのはこれかなと思うので

VisualStudioのデバッグ中に手軽に見たいだけならビジュアライザを使えばいいと思います。
止めた際に変数をポイントするかウォッチなどで変数の値を見れますが、一部のデータ型はビジュアライザを使用してみることができます。
対応したビジュアライザがある場合は虫眼鏡アイコンが表示されますのでアイコンクリックでウィンドウが開いて表示できます。

変数をポイントして虫眼鏡をクリックでびじゅあらいざ

Stringだとそのままコピペできる文字列で表示されますし、ウォッチで見るのは面倒だけどビジュアライザが無い、または良い感じにコピペもできないのかよ!と思った場合はMicrosoft.VisualStudio.DebuggerVisualizersの
DialogDebuggerVisualizerを継承したクラスを自作してデータによってはVisualizerObjectSourceを継承したクラスで加工するなどして表示することも可能です
表示はFormでもWPFでも可能ですので作りやすい方で

投稿2018/12/15 09:45

len_souko

総合スコア1348

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

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

k_mail

2018/12/15 11:33

len_soukoさん ご回答ありがとうございます。 非常に簡単にテーブル形式で表示されますね!!! こんな便利な機能付いていたんですね。。 ありがとうございます!!!!!
guest

0

DataTable にどういうメソッドとプロパティがあるか調べてみてください。
取得に成功していれば Rows でアクセスできます。

投稿2018/12/15 00:34

Zuishin

総合スコア28660

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

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

0

発行しているSQL文が SELECT * FROM 運送会社 ではなく SELECT count(*) FROM 運送会社 なので件数が帰ってくるだけでデータがとれない、というオチではないですか?

投稿2018/12/15 00:48

alg

総合スコア2019

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

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

k_mail

2018/12/15 00:57

ご回答ありがとうございます。 SELECT * FROM 運送会社 に変更致しました。 3と件数は出たのですが、 データ内容は確認できません。 どのようにすると確認できるでしょうか。
k_mail

2018/12/15 00:59

画像を添付致しました。 因みに、table.Rows.Listの中身はnullでした。
guest

0

実行しているSQLをSQL Management Studio等で実行してみてください。
どのようなデータを取得するか確認できるはずです。

逆に、SQLをSQL Management Studio等で希望のデータとなるSQLをプログラム側で実行するようにしてください。

追記

こちらを参照してみてください。

投稿2018/12/15 00:46

編集2018/12/15 01:32
YAmaGNZ

総合スコア10251

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

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

k_mail

2018/12/15 02:16

ご回答ありがとうございます。 adapter.Fill(table);を adapter.Fill(table.Rows[0]);に変更すると、 「エラー CS1503  引数 1: は 'System.Data.DataRow' から 'System.Data.DataSet' へ変換することはできません。」 と表示され、ビルドが通らなくなります。 ---- https://docs.microsoft.com/ja-jp/dotnet/framework/data/adonet/dataset-datatable-dataview/viewing-data-in-a-datatable も確認しましたが、 adapter.Fill(table);を adapter.Fill(table.Select); に変更してみましたが、 「エラー CS1503 引数 1: は 'メソッド グループ' から 'DataSet' へ変換することはできません。」 となり、 ビルドが通らないですね。。。 --- ちなみに、現場では、 直接、DataTableにセットする方がメジャーなのでしょうか。 (データ件数が1万件とかの場合も含め。)
YAmaGNZ

2018/12/15 03:51

どこにそのようなコードがありましたか? >ちなみに 要件次第ではないでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問