タイトル悪いと思います。
C# で SQL Server から SELECT文 の 実行結果 を 取得する 方法
上記のサイトを参考に
C#でデータベースに接続し、データを取得したいです。
予想では、
adapter.Fill(table);
のtable内にデータがあるのかなと思ったのですが、
特に対象と思われるデータがありませんでした。
お手数をお掛け致しますが、
どのようにすれば、データを取得できるかご教示頂きたいです。
(テーブルの情報をどこかにArryリストとして保持しているのかなと思っていたのですが違うようです。。)
[運送会社]テーブル
|運送コード|運送会社|電話番号|
|1 |アカネコ|(03) 3955-98xx|
|2 |トマト |(03) 3681-31xx|
|3 |ペンギン |(03) 3566-99xx|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace チュートリアル_
{
class DBConect
{
//まとめて読み込む (DataTable)
public DataTable GetData()
{
var table = new DataTable();
// 接続文字列の取得
var connectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString;
using (var connection = new SqlConnection(connectionString))
using (var command = connection.CreateCommand())
{
try
{
// データベースの接続開始
connection.Open();
//http://lifesiz.com/adsense/?p=30
// SQLの設定
command.CommandText = @"use POSDB SELECT * FROM 運送会社";
// SQLの実行
var adapter = new SqlDataAdapter(command);
adapter.Fill(table);
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
throw;
}
finally
{
// データベースの接続終了
connection.Close();
}
}
return table;
}
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+4
目で見たいということであれば 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 を開いて「結果ビュー」を開くと見ることができると思います。後で調べて画像を貼っておきます」と書きましたが、その画像を以下に貼っておきます。お試しください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
DataTable にどういうメソッドとプロパティがあるか調べてみてください。
取得に成功していれば Rows でアクセスできます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
解決済みの質問でなんですが、回答への返答などを見ていると多分やりたかったのはこれかなと思うので
VisualStudioのデバッグ中に手軽に見たいだけならビジュアライザを使えばいいと思います。
止めた際に変数をポイントするかウォッチなどで変数の値を見れますが、一部のデータ型はビジュアライザを使用してみることができます。
対応したビジュアライザがある場合は虫眼鏡アイコンが表示されますのでアイコンクリックでウィンドウが開いて表示できます。
Stringだとそのままコピペできる文字列で表示されますし、ウォッチで見るのは面倒だけどビジュアライザが無い、または良い感じにコピペもできないのかよ!と思った場合はMicrosoft.VisualStudio.DebuggerVisualizersの
DialogDebuggerVisualizerを継承したクラスを自作してデータによってはVisualizerObjectSourceを継承したクラスで加工するなどして表示することも可能です
表示はFormでもWPFでも可能ですので作りやすい方で
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
実行しているSQLをSQL Management Studio等で実行してみてください。
どのようなデータを取得するか確認できるはずです。
逆に、SQLをSQL Management Studio等で希望のデータとなるSQLをプログラム側で実行するようにしてください。
追記
こちらを参照してみてください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
発行しているSQL文が SELECT * FROM 運送会社
ではなく SELECT count(*) FROM 運送会社
なので件数が帰ってくるだけでデータがとれない、というオチではないですか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.33%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
Zuishin
2018/12/15 11:31
他の回答のコメントで話があちこちに飛んでいますが、データがどこにあるかという質問ではないのですか?
Rows を知っていたなら質問に最初から書いてください。この質問の書き方だと知らないようにしか見えません。
SurferOnWww
2018/12/15 11:40
どこを見て「特に対象と思われるデータがありませんでした。」と言ってますか? 質問の画像にあるようにDataTable.Rows.Count で 3 となっているから、3 行取得できたのは間違いないのですが????
k_mail
2018/12/15 14:05
他の回答のコメントで話があちこちに飛んでいますが、データがどこにあるかという質問ではないのですか?
⇒はい。カーソルを変数などにあててデータを見ることができたらいいなと思いました。
Rows を知っていたなら質問に最初から書いてください。この質問の書き方だと知らないようにしか見えません。
⇒Rowsは存じあげませんでした。
Zuishinさんのコメントを拝見し知り、実行してみました。
ありがとうございました。
~~~~~~~~~~~~~~~~~~~~
どこを見て「特に対象と思われるデータがありませんでした。」と言ってますか? 質問の画像にあるようにDataTable.Rows.Count で 3 となっているから、3 行取得できたのは間違いないのですが????
⇒データの中身をどこかのオブジェクトか変数にもっていくと、データの値を見ることができるのかなと思っていました。
Rowsは、行数しかできないんですね。
データまで、見るのはちょっと調べてみます。
ありがとうございました。
Zuishin
2018/12/15 14:11
Rows のある次の行にブレークポイントを設定し、止まったところで Rows をポイントすれば中のデータを見ることができます。
SurferOnWww
2018/12/15 14:51
> データの中身をどこかのオブジェクトか変数にもっていくと、データの値を見ることができるのかなと思っていました。
デバッガで見たいのであれば DataTable を開いて Rows を開いて「結果ビュー」を開くと見ることができると思います。後で調べて画像を貼っておきます。
k_mail
2018/12/15 15:37
Zuishinさん
SurferOnWwwさん
中身見ることができました!!
お付き合い頂きありがとうございました。