【C#】C#からSQL Serverのテーブルデータを取得するには

この記事では、C#からSQL Serverのテーブルデータを取得する方法についてご説明します。

【動画】C#からSQL Serverのテーブルデータを取得する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


SqlConnectionインスタンスを生成し、SQL Serverのデータベースに接続するのに必要な接続文字列を参照してSQL Serverのデータベースに接続します。

SQL Serverのデータベースに接続したら、SQLのSELECT文を実行してテーブルデータを取得します。

取得したテーブルデータをデータテーブルに格納してコンソールに表示させています。

今回は取得したテーブルデータを表示する方法として、コンソールへの表示を行っています。

コードの流れ

STEP.1
SQL Serverのデータベースに接続するのに必要な接続文字列を用意する
SQL Serverのデータベースに接続するのに必要な接続文字列を用意します。
STEP.2
STEP.1で用意した接続文字列を元に、SqlConnectionオブジェクトを作成する
STEP.1で用意した接続文字列を元にSqlConnectionオブジェクトを作成します。
STEP.3
SqlConnectionオブジェクトのOpenメソッドを実行してSQL Serverのデータベースに接続する
SqlConnectionオブジェクトのOpenメソッドを実行してSQL Serverのデータベースに接続します。
STEP.4
SQLのSELECT文を実行してテーブルデータを取得する
SQLのSELECT文を実行してテーブルデータを取得します。
STEP.5
STEP.4で取得したSQL Serverのテーブルデータをデータテーブル(DataTable)に格納する
STEP.4で取得したSQL Serverのテーブルデータをデータテーブル(DataTable)に格納します。
STEP.6
データテーブル(DataTable)に格納したSQL Serverのテーブルデータをコンソールに表示する
データテーブル(DataTable)に格納したSQL Serverのテーブルデータをコンソールに表示します。

SQL Serverのテーブルデータの例

今回は次のSQL Serverのテーブルデータを用意しました。

今回はinfoNoが4のPersonのデータ(三浦雄介)を取得してみたいと思います。

取得した結果を「出力」の画面に表示させた結果は下の通りです。

「出力」の画面に、Accessのテーブルから取得した、名前のデータ(三浦雄介)が表示されており、正常にSQL Serverのテーブルからデータが取得できたことが確認できます。

C#のコード(例)

App.configのコード

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
    <appSettings>
        <!-- 接続文字列 -->
        <add key="DBConnString" value="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog={0};Integrated Security=True" />

        <!-- SQL Serverのデータベース名 -->
        <add key="DBName" value="CS_01" />

    </appSettings>
</configuration>

注目すべきコード

見て頂きたいのは8行目から11行目です。

8行目は、SQL Serverのデータベースに接続するのに必要な接続文字列を「DBConnString」というキーに設定しているコードです。

11行目は、SQL Serverのデータベース名を「DBPath」というキーに設定しているコードです。

「DBConnString」と「DBPath」のキーの値をフォーム側のコードが参照して使います。

ちなみに、今回接続しようとしているデータベース「CS_01」は下の画像にあるデータベースです。

フォームのコード

using System;
using System.Windows.Forms;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace wcfs_0006
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // App.configのappSettingsタグ内に記述した「DBConnString」のキーの値を取得して変数「connStrTemplate」に格納する
            string connStrTemplate = ConfigurationManager.AppSettings["DBConnString"];

            // App.configのappSettingsタグ内に記述した「DBName」のキーの値を取得して変数「DBName」に格納する
            string DBName = ConfigurationManager.AppSettings["DBName"];

            // connStrTemplateの{0}の部分を、「DBName」の値に置き換える
            string connectionString = string.Format(connStrTemplate, DBName);

            // SqlConnectionインスタンスを生成
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                // SQL Serverのデータベース「CS_01」に接続する
                connection.Open();

                // SELECT文を用意する
                string sql = "SELECT person FROM tbl_test WHERE infoNo = 4";

                // SqlCommandインスタンスを生成する
                SqlCommand command = new SqlCommand(sql, connection);

                // DataTableインスタンスを生成する
                DataTable dataTable = new DataTable();

                // SqlDataAdapterインスタンスを生成する
                SqlDataAdapter adapter = new SqlDataAdapter(command);

                // データテーブルにデータを格納する
                adapter.Fill(dataTable);

                // 行の数だけ処理を繰り返すループ
                foreach (DataRow row in dataTable.Rows)
                {
                    // 列の数だけ処理を繰り返すループ
                    foreach (DataColumn column in dataTable.Columns)
                    {
                        // 現在の行と列の組み合わせから該当するデータテーブルの値をコンソールに出力する
                        System.Console.WriteLine(row[column] + "\t");
                    }

                }

                // SQL Serverのデータベース「CS_01」への接続を閉じる
                connection.Close();

            }
        }
    }
}

注目すべきコード①

最初に見て頂きたいのは5行目です。

using System.Data.SqlClient;

「System.Data.SqlClient」はSqlConnectionクラスを使うのに必要な名前空間です。

SqlConnectionクラスからインスタンスを生成し、SqlConnectionインスタンスのOpenメソッドを実行することでSQL Serverのデータベースに接続することができます。

注目すべきコード②

次に見て頂きたいのは19行目から22行目です。

            // App.configのappSettingsタグ内に記述した「DBConnString」のキーの値を取得して変数「connStrTemplate」に格納する
            string connStrTemplate = ConfigurationManager.AppSettings["DBConnString"];

            // App.configのappSettingsタグ内に記述した「DBName」のキーの値を取得して変数「DBName」に格納する
            string DBName = ConfigurationManager.AppSettings["DBName"];

コードの説明

以上のコードは、App.configのappSettingsタグ内に記述した「DBConnString」「DBName」のキーの値を取得して変数に格納するコードです。

「DBConnString」のキーの値は変数「connStrTemplate」に、「DBName」のキーの値は変数「DBName」に格納します。

注目すべきコード③

次に見て頂きたいのは25行目です。

            // connStrTemplateの{0}の部分を、「DBName」の値に置き換える
            string connectionString = string.Format(connStrTemplate, DBName);

コードの説明

以上のコードは、connStrTemplateの{0}の部分を、「DBName」の値に置き換える処理のコードです。

connStrTemplateの{0}の部分を、「DBName」の値に置き換える、とはどういうことかというと、{0}の部分をSQL Serverのデータベース名に置き換える、ということです。

今回は接続文字列と、SQL Serverのデータベース名を分けてそれぞれ「DBConnString」と「DBName」とキーを分けてあるので、フォームのコード側で接続文字列と、SQL Serverのデータベース名を一つの文字列に組み立てています。

参考までに、string.Format実行前と実行後の状態を以下にお見せします。

以上のように、{0}の部分が「CS_01」に置き換わっています。

参考:string.Format実行前

“Data Source=(LocalDB)\\MSSQLLocalDB;Initial Catalog={0};Integrated Security=True”

参考:string.Format実行後

“Data Source=(LocalDB)\\MSSQLLocalDB;Initial Catalog=CS_01;Integrated Security=True”

注目すべきコード④

次に見て頂きたいのは28行目から31行目です。

            // SqlConnectionインスタンスを生成
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                // SQL Serverのデータベース「CS_01」に接続する
                connection.Open();

コードの説明

以上のコードは、SqlConnectionインスタンスを作成し、Accessのデータベースファイル接続している処理のコードです。

コードの詳細

28行目のコードでは、App.configから取得したSQL Serverのデータベースの接続情報(connectionString)を元にSqlConnectionインスタンスを作成しています。

31行目のコードでは、生成したSqlConnectionインスタンスのOpenメソッドを実行してSQL Serverのデータベースに接続しています。

注目すべきコード⑤

次に見て頂きたいのは34行目から61行目です。

                // SELECT文を用意する
                string sql = "SELECT person FROM tbl_test WHERE infoNo = 4";

                // SqlCommandインスタンスを生成する
                SqlCommand command = new SqlCommand(sql, connection);

                // DataTableインスタンスを生成する
                DataTable dataTable = new DataTable();

                // SqlDataAdapterインスタンスを生成する
                SqlDataAdapter adapter = new SqlDataAdapter(command);

                // データテーブルにデータを格納する
                adapter.Fill(dataTable);

                // 行の数だけ処理を繰り返すループ
                foreach (DataRow row in dataTable.Rows)
                {
                    // 列の数だけ処理を繰り返すループ
                    foreach (DataColumn column in dataTable.Columns)
                    {
                        // 現在の行と列の組み合わせから該当するデータテーブルの値をコンソールに出力する
                        System.Console.WriteLine(row[column] + "\t");
                    }

                }

                // SQL Serverのデータベース「CS_01」への接続を閉じる
                connection.Close();

コードの説明

以上のコードは、Accessのテーブルデータを取得し、取得したデータをコンソールに出力する処理のコードです。

コードの詳細

34行目のコードでは、SELECT文を用意しています。

SELECT文は、infoNoが4に該当するpersonのデータを取得します。

37行目のコードでは、SqlCommandインスタンスを生成します。

SELECT文を実行するために、SELECT文とSqlConnectionインスタンス(connection)を指定してSqlCommandクラスからインスタンスを生成します。

40行目のコードでは、DataTableインスタンスを生成します。

43行目のコードでは、SqlDataAdapterインスタンスを生成します。

46行目のコードでは、Fillメソッドを実行するとSELECT文が実行されて、取得したデータが「dataTable」に格納されます。

49行目のコードは行の数だけ処理を繰り返すループです。

取得したデータが10件ある場合は10回ループ内の処理を繰り返します。

52行目のコードは列の数だけ処理を繰り返すループです。

取得したデータが5列ある場合は5回ループ内の処理を繰り返します。

55行目のコードでは、現在の行と列の組み合わせから該当するデータテーブルの値をコンソールに出力します。

61行目のコードでは、Accessのデータベースファイルの接続を閉じています。

動作確認

「SQL Serverのテーブルデータの例」をご覧ください。

【注意】参照設定が必要です

一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。

「System.Configuration」の項目を追加しないと、「ConfigurationManager」が存在しないとのことでエラーになってしまいます。

本コードを実行する際は、「System.Configuration」の項目を追加しましょう。

最後に

この記事では、C#からSQL Serverのテーブルデータを取得する方法についてご説明しました。

C#からSQL Serverのテーブルデータを取得したいときは本記事を参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら