この記事では、C#からMySQLのテーブルデータを取得する方法についてご説明します。
【動画】C#からMySQLのテーブルデータを取得する実際の動き
本題に入る前に、まずは次の動画をご覧ください。
MySqlConnectionインスタンスを生成し、MySQLのデータベースに接続するのに必要な接続文字列を参照してMySQLのデータベースに接続します。
MySQLのデータベースに接続したら、SQLのSELECT文を実行してテーブルデータを取得します。
取得したテーブルデータをデータテーブルに格納してコンソールに表示させています。
今回は取得したテーブルデータを表示する方法として、コンソールへの表示を行っています。
コードの流れ
MySQLのデータベースに接続する前準備
C#からMySQLのデータベースに接続するには、「MySqlConnector」と呼ばれるMySQLコネクタが必要です。
「MySqlConnector」を使うには、「MySqlConnector」のインストールがひつようなので、お使いの環境で「MySqlConnector」がインストールされていない場合は下の内容をご参照ください。
参考 「MySqlConnector」のインストールTech-vb.comMySQLのテーブルデータの例
今回は次のMySQLのテーブルデータを用意しました。
今回はidが1のnameのデータ(田中 太一)を取得してみたいと思います。
取得した結果を「出力」の画面に表示させた結果は下の通りです。
「出力」の画面に、MySQLのテーブルから取得した、idが1のnameのデータ(田中 太一)が表示されており、正常にMySQLのテーブルからデータが取得できたことが確認できます。
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行目です。
コードの説明
以上のコードは、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.Data; using System.Configuration; using MySqlConnector; namespace wfcs_0016 { 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タグ内に記述した「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 (MySqlConnection connection = new MySqlConnection(connectionString)) { // データベース接続を開く connection.Open(); // SELECT文を用意する string sqlStr = "SELECT name FROM syain where id = 1"; // SELECT文を実行するためのMySqlCommandインスタンスを生成する MySqlCommand command = new MySqlCommand(sqlStr, connection); // データを格納するためのDataTableインスタンスを生成する DataTable dt = new DataTable(); // コマンドを実行し、結果をDataTableに格納するためのMySqlDataAdapterインスタンスを生成する MySqlDataAdapter adapter = new MySqlDataAdapter(command); // アダプターを使用してデータテーブルにデータを格納する adapter.Fill(dt); // 行の数だけ処理を繰り返すループ foreach (DataRow row in dt.Rows) { // 列の数だけ処理を繰り返すループ foreach (DataColumn column in dt.Columns) { // 現在の行と列の組み合わせから該当するデータテーブルの値をコンソールに出力する Console.WriteLine(row[column]); } } // データベース接続を閉じる connection.Close(); } } } }
注目すべきコード①
最初に見て頂きたいのは5行目です。
using MySqlConnector;
「MySqlConnector」はMySQLコネクタを使うのに必要な名前空間です。
MySqlConnectorは「MySQLのデータベースに接続する前準備」の説明でお話したMySqlConnectorのことです。
C#からMySQLへの接続にはこのMySqlConnectorが必要になりますが、「MySQLのデータベースに接続する前準備」の説明でお話したMySqlConnectorを事前にインストールをしておかないとエラーになります
なので、忘れずにMySqlConnectorをインストールしておきましょう。
参考 「MySqlConnector」のインストールTech-vb.com注目すべきコード②
次に見て頂きたいのは20行目から35行目です。
// 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タグ内に記述した各キーの値を変数に格納する処理のコードです。
20行目では、「DBConnString」のキーの値を変数connStrTemplateに格納しています。
23行目では、「serverVal」のキーの値を変数serverValに格納しています。
26行目では、「portVal」のキーの値を変数portValに格納しています。
29行目では、「databaseVal」のキーの値を変数databaseValに格納しています。
32行目では、「userVal」のキーの値を変数userValに格納しています。
35行目では、「passwordVal」のキーの値を変数passwordValに格納しています。
注目すべきコード②
次に見て頂きたいのは38行目です。
// 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への接続文字列が取得できました。
注目すべきコード③
次に見て頂きたいのは41行目から44行目です。
// MySqlConnectionオブジェクトを作成し、接続文字列を使用してデータベースに接続します。 using (MySqlConnection connection = new MySqlConnection(connectionString)) { // データベース接続を開く connection.Open();
コードの説明
以上のコードは、MySqlConnectionオブジェクトを作成し、MySQLのデータベースに接続している処理のコードです。
以上のコードが正常に実行されれば、MySQLのデータベースに接続されます。
注目すべきコード④
次に見て頂きたいのは47行目から59行目です。
// SELECT文を用意する string sqlStr = "SELECT name FROM syain where id = 1"; // SELECT文を実行するためのMySqlCommandインスタンスを生成する MySqlCommand command = new MySqlCommand(sqlStr, connection); // データを格納するためのDataTableインスタンスを生成する DataTable dt = new DataTable(); // コマンドを実行し、結果をDataTableに格納するためのMySqlDataAdapterインスタンスを生成する MySqlDataAdapter adapter = new MySqlDataAdapter(command); // アダプターを使用してデータテーブルにデータを格納する adapter.Fill(dt);
コードの説明
以上のコードは、MySQLのテーブルデータを取得するSELECT文を用意して実行し、取得したデータをDataTableに格納する処理のコードです。
コードの詳細
47行目のコードは、syainテーブルから、idが1に該当するnameのフィールドの値を取得するSELECT文です。
実際に取得するデータは下のとおりです。
50行目のコードは、SELECT文を実行するために、SELECT文とSqlCommandインスタンス(command)を指定してMySqlCommandクラスからインスタンスを生成します。
53行目のコードは、SELECT文を実行して取得したデータを格納するのに必要なDataTableのインスタンス「dt」を生成します。
56行目のコードは、MySqlDataAdapterインスタンスを生成し、SELECT文を関連付けます。
MySqlDataAdapterインスタンスが生成されたことで、SELECT文を実行することができるようになります。
59行目のコードでは、Fillメソッドを実行するとSELECT文が実行されて、取得したデータが「dt」に格納されます。
注目すべきコード⑤
次に見て頂きたいのは62行目から70行目です。
// 行の数だけ処理を繰り返すループ foreach (DataRow row in dt.Rows) { // 列の数だけ処理を繰り返すループ foreach (DataColumn column in dt.Columns) { // 現在の行と列の組み合わせから該当するデータテーブルの値をコンソールに出力する Console.WriteLine(row[column]); } }
コードの説明
以上のコードは、取得したMySQLのテーブルデータをコンソールに出力する処理のコードです。
62行目のコードは行の数だけ処理を繰り返すループです。
取得したデータが10件ある場合は10回ループ内の処理を繰り返します。
65行目のコードは列の数だけ処理を繰り返すループです。
取得したデータが5列ある場合は5回ループ内の処理を繰り返します。
68行目のコードでは、現在の行と列の組み合わせから該当するデータテーブルの値をコンソールに出力します。
注目すべきコード⑥
次に見て頂きたいのは73行目です。
// データベース接続を閉じる connection.Close();
コードの説明
以上のコードは、データベース接続を閉じる処理のコードです。
動作確認
【注意】参照設定が必要です
一つ注意点があるのですが、先ほどのコードを動かすには参照設定が必要です。
「System.Configuration」の項目を追加しないと、「ConfigurationManager」が存在しないとのことでエラーになってしまいます。
本コードを実行する際は、「System.Configuration」の項目を追加しましょう。
最後に
この記事では、C#からMySQLのテーブルデータを取得する方法についてご説明しました。
C#からMySQLのテーブルデータを取得したいときは本記事を参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。