【C#】SQL ServerのテーブルデータをC#のdataGridViewに表示するには

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

【動画】SQL ServerのテーブルデータをC#のdataGridViewに表示する実際の動き

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


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

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

取得したテーブルデータをデータテーブルに格納してDataGridViewにデータを表示します。

コードの流れ

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のテーブルデータをDataGridViewにデータを表示する
データテーブル(DataTable)に格納したSQL ServerのテーブルデータをDataGridViewにデータを表示します。

フォームとSQL Serverのテーブルデータの例

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

フォーム上には処理を開始する実行ボタンとSQL Serverのテーブルデータを表示させるdataGridViewが設置されています。

dataGridViewには、以下のSQL Serverのテーブルデータを表示させます。

DataGridViewに表示させた結果は下の通りです。

dataGridViewに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のデータベース名を「DBName」というキーに設定しているコードです。

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

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

フォームのコード

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

namespace wfcs_0008
{
    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」のキーの値を取得して変数「dbPathStr」に格納する
            string dbPathStr = ConfigurationManager.AppSettings["DBName"];

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

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

                // SELECT文を用意する
                string query = "SELECT * FROM tbl_test";

                // SqlCommandインスタンスを生成する
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    // SqlDataAdapterインスタンスを生成する
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        // DataTableインスタンスを生成する
                        DataTable dt = new DataTable();

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

                        // DataGridViewにデータを表示する
                        this.dataGridView1.DataSource = dt;
                    }
                }

                // SQL Serverのデータベースの接続を閉じる
                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」のキーの値を取得して変数「dbPathStr」に格納する
            string dbPathStr = ConfigurationManager.AppSettings["DBName"];

コードの説明

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

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

注目すべきコード③

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

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

コードの説明

以上のコードは、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のデータベースに接続する
                connection.Open();

コードの説明

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

コードの詳細

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

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

注目すべきコード⑤

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

                // SELECT文を用意する
                string query = "SELECT * FROM tbl_test";

                // SqlCommandインスタンスを生成する
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    // SqlDataAdapterインスタンスを生成する
                    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                    {
                        // DataTableインスタンスを生成する
                        DataTable dt = new DataTable();

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

                        // DataGridViewにデータを表示する
                        this.dataGridView1.DataSource = dt;
                    }
                }

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

コードの説明

以上のコードは、SQL Serverのテーブルデータを取得するSELECT文を用意して実行し、取得したSQL ServerのテーブルデータをdataGridViewに表示する処理のコードです。

続けてSQL Serverのデータベースの接続を閉じています。

コードの詳細

34行目のコードでは、SQL Serverのテーブルデータを取得するSELECT文を用意しています。

37行目のコードでは、SELECT文を実行するために、SELECT文とSqlCommandインスタンス(command)を指定してSqlCommandクラスからインスタンスを生成します。

40行目のコードでは、SqlDataAdapterインスタンスを生成し、SELECT文を関連付けます。

SqlDataAdapterインスタンスが生成されたことで、SELECT文を実行することができるようになります。

43行目のコードでは、SELECT文を実行して取得したデータを格納するのに必要なDataTableのインスタンス「dt」を生成します。

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

49行目のコードでは、取得したSQL ServerのテーブルデータをdataGridViewに表示させます。

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

動作確認

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

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

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

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

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

最後に

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

SQL ServerのテーブルデータをC#のdataGridViewに表示させたいときは本記事を参考にしてみてくださいね。

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

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

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

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