【C#】C#のコンボボックスにAccessのテーブルデータの値を登録するには

この記事では、C#のコンボボックスにAccessのテーブルデータの値を登録する方法についてご説明します。

【動画】C#のコンボボックスにAccessのテーブルデータの値を登録する実際の動き

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


Accessのテーブルデータから取得したコンボボックスに登録したい値をAddメソッドの引数に指定して実行すると、その値がコンボボックスに表示されます。

コードの流れ

STEP.1
Accessのファイルを開く
Accessのファイルを開きます
STEP.2
Accessのテーブルからコンボボックスに登録したいデータを取得する
Accessのテーブルからコンボボックスに登録したいデータを取得します
STEP.3
取得した値をAddメソッドの引数に指定して実行する
取得した値をAddメソッドの引数に指定して実行します

Accessのテーブルデータとコンボボックスの例

Accessのテーブルデータ

今回は以下のAccessのテーブルデータを用意しました。

フォーム

今回はフォーム上に以下のコンボボックスを設置しました。

Accessのテーブルデータの値をコンボボックスに登録した結果は下のとおりです。

コンボボックスに登録されたAccessのテーブルデータの値が表示されています。

C#のコード(例)

App.configのコード

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<startup>
		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
	</startup>
	<appSettings>
		<!-- Accessのデータベースファイルのパス -->
		<add key="AccessのテーブルデータFilePath" value="C:\work\10_勉強\21_C#\0079\0079.mdb" />
	
	</appSettings>
</configuration>

注目すべきコード

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

8行目は、Accessのファイルのフルパスを「DBPath」というキーに設定しているコードです。

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

ちなみに、今回扱うAccessのファイルは下の画像のとおりです。(C:\work\10_勉強\21_C#\0078\0079.mdb)

フォームのコード

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

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

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

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

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

            // OleDbConnectionインスタンスを生成する
            using (var connection = new OleDbConnection(connectionString))
            {
                // SELECT文を用意する
                string commandText = "SELECT 名前 FROM t_item";

                // OleDbCommandインスタンスを生成する
                var command = new OleDbCommand(commandText, connection);

                // Accessのデータベースファイルを開く
                connection.Open();

                // SELECT文を実行し、結果をOleDbDataReaderのインスタンスに格納する
                using (var reader = command.ExecuteReader())
                {                
                    // 取得したデータの最終行まで処理を繰り返すwhileループ
                    while (reader.Read())
                    {
                        // 値をコンボボックスに追加する(フィールド名が「名前」の値)
                        comboBox1.Items.Add(reader["名前"].ToString());
                    }
                }
            }
        }
    }
}

注目すべきコード①

最初に見て頂きたいのは18行目から21行目です。

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

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

コードの説明

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

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

注目すべきコード②

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

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

コードの説明

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

connStrTemplateの{0}の部分を、「dbPathStr」の値に置き換える、とはどういうことかというと、{0}の部分をAccessのデータベースファイルのフルパスに置き換える、ということです。

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

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

以上のように、{0}の部分が「C:\work\10_勉強\21_C#\0079\0079.mdb」に置き換わっています。

参考:string.Format実行前

Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}

参考:string.Format実行後

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\work\10_勉強\21_C#\0079\0079.mdb

注目すべきコード②

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

            // OleDbConnectionインスタンスを生成する
            using (var connection = new OleDbConnection(connectionString))

コードの説明

以上のコードは、Accessのテーブルデータを読み込むOleDbConnectionインスタンスを生成するコードです。

注目すべきコード②

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

                // SELECT文を用意する
                string commandText = "SELECT 名前 FROM t_item";

                // OleDbCommandインスタンスを生成する
                var command = new OleDbCommand(commandText, connection);

                // Accessのデータベースファイルを開く
                connection.Open();

                // SELECT文を実行し、結果をOleDbDataReaderのインスタンスに格納する
                using (var reader = command.ExecuteReader())
                {                
                    // 取得したデータの最終行まで処理を繰り返すwhileループ
                    while (reader.Read())
                    {
                        // 値をコンボボックスに追加する(フィールド名が「名前」の値)
                        comboBox1.Items.Add(reader["名前"].ToString());
                    }
                }

コードの説明

以上のコードは、Accessのテーブルデータを取得してその値をコンボボックスに登録する処理のコードです。

コードの詳細

30行目のコードは、コンボボックスに登録したい値を取得するSELECT文を用意するコードです。

今回は「名前」のフィールドの値をコンボボックスに登録するため、SELECT文に「名前」を指定しています。

33行目のコードでOleDbCommandインスタンスを生成し、36行目でAccessのデータベースファイルを開きます。

39行目では、SELECT文を実行し、結果をOleDbDataReaderのインスタンスに格納します。

42行目は取得したデータの最終行まで処理を繰り返すwhileで、Accessのテーブルから取得したデータを1行ずつコンボボックスに登録します。

動作確認

Accessのテーブルデータとコンボボックスの例」をご覧ください。

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

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

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

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

最後に

この記事では、C#のコンボボックスにAccessのテーブルデータの値を登録する方法についてご説明しました。

C#のコンボボックスにAccessのテーブルデータの値を登録したいときは本記事を参考にしてみてくださいね。

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

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

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

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