この記事では、C#のコンボボックスにMySQLのテーブルデータの値を登録する方法についてご説明します。
【動画】C#のコンボボックスにMySQLのテーブルデータの値を登録する実際の動き
本題に入る前に、まずは次の動画をご覧ください。
MySQLのテーブルデータから取得したコンボボックスに登録したい値をAddメソッドの引数に指定して実行すると、その値がコンボボックスに表示されます。
コードの流れ
MySQLのデータベースに接続する前準備
C#からMySQLのデータベースに接続するには、「MySqlConnector」と呼ばれるMySQLコネクタが必要です。
「MySqlConnector」を使うには、「MySqlConnector」のインストールが必要なので、お使いの環境で「MySqlConnector」がインストールされていない場合は下の内容をご参照ください。
参考 「MySqlConnector」のインストールTech-vb.comMySQLのテーブルデータとコンボボックスの例
MySQLのテーブルデータ
今回は以下のMySQLのテーブルデータを用意しました。
今回は「name」のフィールドの値をコンボボックスに出力します。
フォーム
今回はフォーム上に以下のコンボボックスを設置しました。
MySQLのテーブルデータの値をコンボボックスに登録した結果は下のとおりです。
コンボボックスに登録されたMySQLのテーブルデータ(「name」のフィールド)の値が表示されています。(「name」のフィールドの値)
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="server={0};port={1};database={2};user={3};password={4}" /> <!-- 接続したいMySQLのサーバの名称 --> <add key="serverVal" value="localhost" /> <!-- ポートの値 --> <add key="portVal" value="3306" /> <!-- 接続したいデータベース名 --> <add key="databaseVal" value="testdb" /> <!-- MySQLのデータベースに接続するためのユーザ名 --> <add key="userVal" value="root" /> <!-- MySQLのデータベースに接続するためのパスワード --> <add key="passwordVal" value="testPass@123456" /> </appSettings> </configuration>
注目すべきコード①
最初に見て頂きたいのは10行目から25行目です。
<!-- 接続文字列 --> <add key="DBConnString" value="server={0};port={1};database={2};user={3};password={4}" /> <!-- 接続したいMySQLのサーバの名称 --> <add key="serverVal" value="localhost" /> <!-- ポートの値 --> <add key="portVal" value="3306" /> <!-- 接続したいデータベース名 --> <add key="databaseVal" value="testdb" /> <!-- MySQLのデータベースに接続するためのユーザ名 --> <add key="userVal" value="root" /> <!-- MySQLのデータベースに接続するためのパスワード --> <add key="passwordVal" value="testPass@123456" />
コードの説明
以上のコードは、MySQLのデータベースに接続するのに必要な接続文字列を「DBConnString」というキーに設定しているコードです。
10行目のコードにある{0}、{1}、{2}、{3}、{4}それぞれに、13行目から25行目のキーの値が設定されます。
キーの値はForm側のコードで設定されます。
Form側の処理は、「注目すべきコード③」をご覧ください。
なお、{0}から{4}までの設定値は以下の通りです。
- {0}「serverVal」:localhost(接続したいMySQLのサーバの名称)
- {1}「portVal」:3306(ポートの値)
- {2}「databaseVal」:testdb(接続したいデータベース名)
- {3}「userVal」:root(MySQLのデータベースに接続するためのユーザ名)
- {4}「passwordVal」:testPass@123456(MySQLのデータベースに接続するためのパスワード)
フォームのコード
using System; using System.Windows.Forms; using System.Configuration; using MySqlConnector; namespace wfcs_0081 { 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タグ内に記述した「serverVal」のキーの値を取得して変数「serverVal」に格納する string serverVal = ConfigurationManager.AppSettings["serverVal"]; // App.configのappSettingsタグ内に記述した「portVal」のキーの値を取得して変数「portVal」に格納する string portVal = ConfigurationManager.AppSettings["portVal"]; // App.configのappSettingsタグ内に記述した「databaseVal」のキーの値を取得して変数「databaseVal」に格納する string databaseVal = ConfigurationManager.AppSettings["databaseVal"]; // App.configのappSettingsタグ内に記述した「userVal」のキーの値を取得して変数「userVal」に格納する string userVal = ConfigurationManager.AppSettings["userVal"]; // App.configのappSettingsタグ内に記述した「passwordVal」のキーの値を取得して変数「passwordVal」に格納する string passwordVal = ConfigurationManager.AppSettings["passwordVal"]; // connStrTemplateの{0}、{1}、{2}、{3}、{4}の部分を「serverVal」「portVal」「databaseVal」「userVal」「passwordVal」それぞれの値に置き換える string connectionString = string.Format(connStrTemplate, serverVal, portVal, databaseVal, userVal, passwordVal); // MySqlConnectionインスタンスを生成する using (var connection = new MySqlConnector.MySqlConnection(connectionString)) { // MySQLのデータベースファイルを開く connection.Open(); // SELECT文を用意する string commandText = "SELECT name FROM syain"; // MySqlCommandインスタンスを生成する var command = new MySqlCommand(commandText, connection); // SELECT文を実行し、結果をreaderに格納する using (var reader = command.ExecuteReader()) { // 取得したデータの最終行まで処理を繰り返すwhileループ while (reader.Read()) { // 値をコンボボックスに追加する(フィールド名が「name」の値) comboBox1.Items.Add(reader["name"].ToString()); } } } } } }
注目すべきコード①
最初に見て頂きたいのは5行目です。
using MySqlConnector;
「MySqlConnector」はMySQLコネクタを使うのに必要な名前空間です。
MySqlConnectorは「MySQLのデータベースに接続する前準備」の説明でお話したMySqlConnectorのことです。
C#からMySQLへの接続にはこのMySqlConnectorが必要になりますが、「MySQLのデータベースに接続する前準備」の説明でお話したMySqlConnectorを事前にインストールをしておかないとエラーになります
なので、忘れずにMySqlConnectorをインストールしておきましょう。
参考 「MySqlConnector」のインストールTech-vb.com注目すべきコード③
次に見て頂きたいのは18行目から33行目です。
// App.configのappSettingsタグ内に記述した「DBConnString」のキーの値を取得して変数「connStrTemplate」に格納する string connStrTemplate = ConfigurationManager.AppSettings["DBConnString"]; // App.configのappSettingsタグ内に記述した「serverVal」のキーの値を取得して変数「serverVal」に格納する string serverVal = ConfigurationManager.AppSettings["serverVal"]; // App.configのappSettingsタグ内に記述した「portVal」のキーの値を取得して変数「portVal」に格納する string portVal = ConfigurationManager.AppSettings["portVal"]; // App.configのappSettingsタグ内に記述した「databaseVal」のキーの値を取得して変数「databaseVal」に格納する string databaseVal = ConfigurationManager.AppSettings["databaseVal"]; // App.configのappSettingsタグ内に記述した「userVal」のキーの値を取得して変数「userVal」に格納する string userVal = ConfigurationManager.AppSettings["userVal"]; // App.configのappSettingsタグ内に記述した「passwordVal」のキーの値を取得して変数「passwordVal」に格納する string passwordVal = ConfigurationManager.AppSettings["passwordVal"];
コードの説明
以上のコードは、App.configのappSettingsタグ内に記述した各キーの値を変数に格納する処理のコードです。
18行目では、「DBConnString」のキーの値を変数connStrTemplateに格納しています。
21行目では、「serverVal」のキーの値を変数serverValに格納しています。
24行目では、「portVal」のキーの値を変数portValに格納しています。
27行目では、「databaseVal」のキーの値を変数databaseValに格納しています。
30行目では、「userVal」のキーの値を変数userValに格納しています。
33行目では、「passwordVal」のキーの値を変数passwordValに格納しています。
注目すべきコード④
次に見て頂きたいのは36行目です。
// connStrTemplateの{0}、{1}、{2}、{3}、{4}の部分を「serverVal」「portVal」「databaseVal」「userVal」「passwordVal」それぞれの値に置き換える string connectionString = string.Format(connStrTemplate, serverVal, portVal, databaseVal, userVal, passwordVal);
コードの説明
以上のコードは、connStrTemplateの{0}、{1}、{2}、{3}、{4}の部分を「serverVal」「portVal」「databaseVal」「userVal」「passwordVal」それぞれの値に置き換える処理のコードです。
- serverVal:localhost(接続したいMySQLのサーバの名称)
- portVal:3306(ポートの値)
- databaseVal:testdb(接続したいデータベース名)
- userVal:root(MySQLのデータベースに接続するためのユーザ名)
- passwordVal:testPass@123456(MySQLのデータベースに接続するためのパスワード)
置き換える前と後の状態は以下の通りです。
変数connStrTemplateには{0}、{1}、{2}、{3}、{4}が含まれていますが、string.Formatを実行すると、{0}、{1}、{2}、{3}、{4}の部分が「serverVal」「portVal」「databaseVal」「userVal」「passwordVal」それぞれの値に置き換わります。(connectionStringに格納されます)
以上により、MySQLへの接続文字列が取得できました。
注目すべきコード⑤
次に見て頂きたいのは39行目から42行目です。
// MySqlConnectionインスタンスを生成する using (var connection = new MySqlConnector.MySqlConnection(connectionString)) { // MySQLのデータベースファイルを開く connection.Open();
コードの説明
以上のコードは、MySqlConnectionオブジェクトを作成し、MySQLのデータベースに接続している処理のコードです。
以上のコードが正常に実行されれば、MySQLのデータベースに接続されます。
注目すべきコード⑥
次に見て頂きたいのは45行目から62行目です。
// SELECT文を用意する string commandText = "SELECT name FROM syain"; // MySqlCommandインスタンスを生成する var command = new MySqlCommand(commandText, connection); // SELECT文を実行し、結果をreaderに格納する using (var reader = command.ExecuteReader()) { // 取得したデータの最終行まで処理を繰り返すwhileループ while (reader.Read()) { // 値をコンボボックスに追加する(フィールド名が「name」の値) comboBox1.Items.Add(reader["name"].ToString()); } } // MySQLのデータベースの接続を閉じる connection.Close();
コードの説明
以上のコードは、MySQLのテーブルデータを取得してその値をコンボボックスに登録する処理のコードです。
コードの詳細
45行目のコードは、コンボボックスに登録したい値を取得するSELECT文を用意するコードです。
今回は「name」のフィールドの値をコンボボックスに登録するため、SELECT文に「name」を指定しています。
48行目のコードではMySqlCommandインスタンスを生成しています。
51行目でSELECT文を実行し、結果をreaderに格納します。
54行目は取得したデータの最終行まで処理を繰り返すwhileで、57行目でMySQLのテーブルから取得したデータを1行ずつコンボボックスに登録します。
62行目のコードでは、MySQLのデータベースの接続を閉じます。
動作確認
「MySQLのテーブルデータとコンボボックスの例」をご覧ください。
【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。
「System.Configuration」の項目を追加しないと、「ConfigurationManager」が存在しないとのことでエラーになってしまいます。
本コードを実行する際は、「System.Configuration」の項目を追加しましょう。
最後に
この記事では、C#のコンボボックスにMySQLのテーブルデータの値を登録する方法についてご説明しました。
C#のコンボボックスにMySQLのテーブルデータの値を登録したいときは本記事を参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。