この記事では、C#のコンボボックスにSQL Serverのテーブルデータの値を登録する方法についてご説明します。
【動画】C#のコンボボックスにSQL Serverのテーブルデータの値を登録する実際の動き
本題に入る前に、まずは次の動画をご覧ください。
SQL Serverのテーブルデータから取得したコンボボックスに登録したい値をAddメソッドの引数に指定して実行すると、その値がコンボボックスに表示されます。
コードの流れ
SQL Serverのテーブルデータとコンボボックスの例
SQL Serverのテーブルデータ
今回は以下のSQL Serverのテーブルデータを用意しました。
フォーム
今回はフォーム上に以下のコンボボックスを設置しました。
SQL Serverのテーブルデータの値をコンボボックスに登録した結果は下のとおりです。
コンボボックスに登録された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.Data.SqlClient;
using System.Windows.Forms;
using System.Configuration;
namespace wfcs_0080
{
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タグ内に記述した「DBName」のキーの値を取得して変数「dbPathStr」に格納する
string dbPathStr = ConfigurationManager.AppSettings["DBName"];
// connStrTemplateの{0}の部分を、「dbPathStr」の値に置き換える
string connectionString = string.Format(connStrTemplate, dbPathStr);
// SqlConnectionインスタンスを生成する
using (var connection = new SqlConnection(connectionString))
{
// SQL Serverのデータベースファイルを開く
connection.Open();
// SELECT文を用意する
string commandText = "SELECT person FROM tbl_test";
// SqlCommandインスタンスを生成する
var command = new SqlCommand(commandText, connection);
// SELECT文を実行し、結果をSqlDataReaderのインスタンスに格納する
using (var reader = command.ExecuteReader())
{
// 取得したデータの最終行まで処理を繰り返すwhileループ
while (reader.Read())
{
// 値をコンボボックスに追加する(フィールド名が「person」の値)
comboBox1.Items.Add(reader["person"].ToString());
}
}
// SQL Serverのデータベースの接続を閉じる
connection.Close();
}
}
}
}
注目すべきコード①
最初に見て頂きたいのは18行目から21行目です。
// App.configのappSettingsタグ内に記述した「DBConnString」のキーの値を取得して変数「connStrTemplate」に格納する
string connStrTemplate = ConfigurationManager.AppSettings["DBConnString"];
// App.configのappSettingsタグ内に記述した「DBName」のキーの値を取得して変数「dbPathStr」に格納する
string dbPathStr = ConfigurationManager.AppSettings["DBName"];
コードの説明
以上のコードは、App.configのappSettingsタグ内に記述した「DBConnString」「DBPath」のキーの値を取得して変数に格納するコードです。
「DBConnString」のキーの値は変数「connStrTemplate」に、「DBPath」のキーの値は変数「dbPathStr」に格納します。
注目すべきコード②
次に見て頂きたいのは24行目です。
// 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」に置き換わっています。
“Data Source=(LocalDB)\\MSSQLLocalDB;Initial Catalog={0};Integrated Security=True”
“Data Source=(LocalDB)\\MSSQLLocalDB;Initial Catalog=CS_01;Integrated Security=True”
注目すべきコード②
次に見て頂きたいのは27行目から30行目です。
// SqlConnectionインスタンスを生成する
using (var connection = new SqlConnection(connectionString))
{
// SQL Serverのデータベースファイルを開く
connection.Open();
コードの説明
以上のコードは、
以上のコードは、SqlConnectionインスタンスを作成し、SQL Serverのデータベースファイル接続している処理のコードです。
注目すべきコード②
次に見て頂きたいのは33行目から50行目です。
// SELECT文を用意する
string commandText = "SELECT person FROM tbl_test";
// SqlCommandインスタンスを生成する
var command = new SqlCommand(commandText, connection);
// SELECT文を実行し、結果をSqlDataReaderのインスタンスに格納する
using (var reader = command.ExecuteReader())
{
// 取得したデータの最終行まで処理を繰り返すwhileループ
while (reader.Read())
{
// 値をコンボボックスに追加する(フィールド名が「person」の値)
comboBox1.Items.Add(reader["person"].ToString());
}
}
// SQL Serverのデータベースの接続を閉じる
connection.Close();
コードの説明
以上のコードは、SQL Serverのテーブルデータを取得してその値をコンボボックスに登録する処理のコードです。
コードの詳細
33行目のコードは、コンボボックスに登録したい値を取得するSELECT文を用意するコードです。
今回は「person」のフィールドの値をコンボボックスに登録するため、SELECT文に「person」を指定しています。
36行目のコードではSqlCommandインスタンスを生成しています。
39行目でSELECT文を実行し、結果をSqlDataReaderのインスタンスに格納します。
42行目は取得したデータの最終行まで処理を繰り返すwhileで、45行目でSQL Serverのテーブルから取得したデータを1行ずつコンボボックスに登録します。
50行目のコードでは、SQL Serverのデータベースの接続を閉じます。
動作確認
「SQL Serverのテーブルデータとコンボボックスの例」をご覧ください。
【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。
「System.Configuration」の項目を追加しないと、「ConfigurationManager」が存在しないとのことでエラーになってしまいます。
本コードを実行する際は、「System.Configuration」の項目を追加しましょう。
最後に
この記事では、C#のコンボボックスにSQL Serverのテーブルデータの値を登録する方法についてご説明します。
C#のコンボボックスにSQL Serverのテーブルデータの値を登録したいときは本記事を参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。









