C#からMySQLに接続する

MySQLコネクタダウンロードトップの画像 C#

C#(VisualStudio)からMySQLに接続する方法を説明しています。

2021.0212 管理人より

本記事内容はVisual Studio2017時代に書いたもので内容が古くなっています。
もしお使いの環境がVisual Studio2019以降であれば、以下の新しい記事を参考になさってください。(大分手順が簡単になっています!)

MySQLはワードプレスなどでもおなじみのフリーの代表的なリレーショナルデータベースです。
最近XAMPPをインストールするとMariaDBというデータベースがインストールされますが、基本的にはMariaDBは、MySQLと同じです。

今回は、MySQLの環境としてXAMPPを使っています。MySQLあるいはXAMPPがインストールされていない方はこちらからXAMPPをインストールしてください。

まず接続イメージです。
大枠としてC#もMySQLもそれぞれが一つのアプリケーションであり、独立した存在です。
この2つを繋げる橋渡し役が必要になります。

イメージ図
MySQLコネクタイメージ図の画像

MySQLの場合は、MySQLコネクタというアプリケーションがその橋渡し役を担います。
MySQLコネクタは、MySQLのサイトからOS毎のバージョンがダウンロードできます。
今回はMySQLコネクタを使ってC#からMySQLに接続するまでを順を追って説明します。

MySQLコネクタのインストール(Windows/C#編)

Visual StudioとMySQLをつなげるためのソフトMySQLコネクタをインストールします。
MySQLコネクタは、MySQLの公式サイトにあります。

こちらにアクセスしてください。

ADO.NET Driver for MySQL (Connector/NET)がC#でMySQLにアクセスするときに必要なソフトです。
ダウンロードボタンをクリックします。

MySQLコネクタダウンロードトップの画像

Select Operating Systemの部分は、Microsoft Windowsを選択してDownloadボタンをクリックします。

MySQLコネクタダウンロード選択の画像

続いて表示される画面には、LoginやSign Upなどと表示されていて少々ビビりますが、落ち着いて下にあるNo thanks, just start my download.をクリックしましょう。英語が分かると安心ですね。

MySQLコネクタダウンロードボタンの画像

ファイル保存を促すメッセージ画面が表示されますので、保存をクリックします。

MySQLコネクタダウンロード保存の画像

ダウンロードが完了したらウイルスチェックを忘れずにして、ダウンロードしてファイルをダブルクリックしてインストーラを起動します。
わたしの場合、mysql-connector-net-6.9.10.msiというファイルでした。6.9.10などの数字の部分は、バージョンなので変わると思います。

インストール中にChoose Setup Typeと表示された場合は、Typical(典型的な)を選択してNext>Installへと進んでください。

MySQLコネクタインストール設定の画像

インストールは、以上です。
MySQLコネクタは、インストールしておくだけです。
C#から使う場合の設定は、Visual Studio側で行います。

C#からMySQLに接続するための設定(VisualStudio)

簡単なコンソールアプリを作ってテストします。

Visual Studioを起動して、

ファイル >新規作成 >プロジェクト…

から「コンソールアプリ」を選択して、プロジェクト名をMySQL接続テストとしてください。

プロジェクトが作成されたら、まず初めにMySQLコネクタを使うための設定をする必要があります。

ソリューションエクスプローラのMySQL接続テストの下に参照という項目があります。
参照の部分を右クリックして参照の追加…を選びます。

MySQLコネクタ参照設定1の画像

参照は、外部のプログラムをプロジェクト内から呼び出して使うための機能です。
今回は、先ほどインストールしたMySQLコネクタをプロジェクトから参照します。

参照マネージャーというウインドウが開きます。
アセンブリ >フレームワーク がデフォルトで選択されていると思います。

右上の検索ボックスにmysqlと入力してみてください。(沢山リストアップされるのでテキストボックスで検索した方がはやいです)

MySQLコネクタ参照設定の画像

MySQL.Dataという項目がリストアップされます。
ここで左側のチェックボックスにチェックを入れOKボタンをクリックします。(画像ではMySQL.Dataが2つ存在しますが、上の方を1つチェックすれば大丈夫です)

ソリューションエクスプローラの参照項目にMySQL.Dataが追加されていればOKです。

MySQLコネクタ参照チェックの画像

C#からMySQLを使うための設定は以上です。

MySQLの起動とデータベースの確認(XAMPP)

C#から接続する前にMySQL自体を起動しておかなければなりません。MySQLの起動と合わせてデータベースの内容確認もしておきます。

MySQLをインストールした場合、その名のとおりmysqlというデータベースが最初から存在します。
実際にmysqlというデータベースが存在するのか確認を行ってみます。
XAMPPをインストールしていれば以下のように確認できます。

XAMPPコントロールパネルを起動します。

XAMPPコントロールパネル起動の画像

XAMPPコントロールパネルが起動したらApacheMySQLのそれぞれ右側にあるStartボタンをクリックします。
MySQLを使うだけであれば、Apache(サーバ)を起動する必要はないのですが、この後ブラウザからデータベースを確認できるphpMyAdminを使うためApacheを起動しています。

XAMPP_ApacheとMySQLの起動の画像

しばらくするとボタンの表示がStopに変わり、ApacheとMySQLの文字の背景が緑色に変わります。
正常起動した場合は、緑色です。赤や黄色だと正常に起動していません。確認を行って下さい。

次にMySQLの部分のAdminというボタンをクリックします。

XAMPP_PHPMyAdminの起動の画像

ブラウザでphpMyAdminが起動します。
phpMyAdminは、ブラウザ上でMySQLをビジュアルに操作できるソフトです。データベースやテーブルの作成がある程度ビジュアル操作で行うことができます。

mysqlというデータベースが存在していることが分かります。

phpMyAdminのイメージ画像

ちなみにmysqlというデータベースは、大事なデータベースなので書き換えたり削除したりしないでください。
このままMySQLは起動したままにしておきます。

MySQL接続テストプログラムの作成(Program.cs)

XAMPPをインストールした場合、MySQLへの接続情報は、デフォルトでは下記の表のようになっています。

MySQLホスト名localhost
ユーザ名root
パスワードなし

このデータベースにC#から接続するソースコードは以下の通りです。

ポイントとしては、プログラムの先頭でMySQLコネクタのライブラリを使うための記述を忘れないことです。

using MySql.Data.MySqlClient;

うまくMySQLに接続できると以下のコンソール画面となります。

MySQLと接続成功の画像

それでは、Visual StudioソリューションエクスプローラのProgram.cs内を編集して以下のソースコードを実行確認してみてください。

コメント

  1. mike2131 より:

    “Program.cs内を編集して以下のソースコードを実行確認してみてください。”のソースコードが無いように見えます。もう、公開してないという事なのでしょうか。もし可能であれば、再度掲載していただけたら幸いです。

    • dennou より:

      こんばんは。管理人です。
      一応わたしの環境では見えているのですが、ソースコードが見えないということですので、以下に再度掲載しておきます。

      Program.cs

      /*
      ●Visual StudioとMySQLを接続するプログラムを作成するには
      ソリューションエクスプローラー
      	「参照」を右クリックー「参照の追加...」ー「アセンブリ」-「フレームワーク」を選択
      	
      	「MySql.Data」にチェックを入れて「OK」ボタンを押す
      			…	表示されるフレームワークの数が多すぎるので
      				検索ボックスに「mysql」と入力するとはやい
      */
      
      using System;
      // MySQLを使うため
      using MySql.Data.MySqlClient;
      
      namespace MySQL接続テスト
      {
      	class Program
      	{
      		static void Main(string[] args)
      		{
      			// MySQLへの接続情報
      			string server = "localhost";		// MySQLサーバホスト名
      			string user = "root";			// MySQLユーザ名
      			string pass = "";			// MySQLパスワード
      			string database = "mysql";		// 接続するデータベース名
      			string connectionString = string.Format("Server={0};Database={1};Uid={2};Pwd={3}", server, database, user, pass);
      			// MySQLへの接続
      			try
      			{
      				MySqlConnection connection = new MySqlConnection(connectionString);
      				connection.Open();
      				Console.WriteLine("MySQLに接続しました!");
      				// 接続の解除
      				connection.Close();
      			}
      			catch (MySqlException me)
      			{
      				Console.WriteLine("ERROR: " + me.Message);
      			}
      		}
      	}
      }
      

      見えない理由の推測:
      サイト上のProgram.cs部分は、GitHub掲載後に取得したJavaScriptタグコードをサイトに埋め込んだものですので、環境によって見えないのかもしれません。失礼しました。

      一応大元のリンク先は、以下URL
      https://gist.github.com/mrgarita/6dd172fee8f9c10639a83e506f78bb7a#file-program-cs

      • mike2131 より:

        御対応ありがとうございました。
        社内Proxy経由だとgithubがSEC_ERROR_UNKNOWN_ISSUERで見れないという事が分かりました。
        タイのスマホのテザリング経由だと問題なく見られました。
        githubくらい見せてほしいとシステム部にリクエストしてみます。

        • dennou より:

          なるほど。
          最近のセキュリティに関する警告は不便さの方が多く感じますね。(でもそれだけ攻撃が多いという事?)
          いい勉強になりました。

  2. がんばるまん より:

    C#初心者です。DBへの接続大変参考になりました。
    この後SQLを使いデータを取得する所の記載はないでしょうか?
    色々なやり方があるみたいで一貫性がないのでイマイチいいサイトが見つからないなか
    このサイトがすごく分かりやすかったので、できれば教えて頂けると有難いです。

    • dennou より:

      がんばるまんさん こんにちは。管理人です。
      参考にして頂きありがとうございます。

      作成済みのデータベースからSQLを使ってデータ取得するプログラムイメージは以下のような感じです。
      下記の例では、mydbというデータベースのtest_tableからデータを取得してコンソールに表示しています。

      using MySql.Data.MySqlClient;
      using System;
      using System.Collections.Generic;
      using System.Data;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace MySQLコンソール
      {
      	class Program
      	{
      		static void Main(string[] args)
      		{
      			// MySQLへの接続情報
      			string server = "localhost";
      			string database = "mydb";
      			string user = "root";
      			string pass = "";
      			string charset = "utf8";
      			string connectionString = string.Format("Server={0};Database={1};Uid={2};Pwd={3};Charset={4}", server, database, user, pass, charset);
      			// MySQLへの接続
      			try
      			{
      				MySqlConnection connection = new MySqlConnection(connectionString);
      				connection.Open();
      				// データを格納するテーブル作成
      				DataTable dt = new DataTable();
      				// SQL文と接続情報を指定し、データアダプタを作成
      				string query = "select * from test_table";
      				MySqlDataAdapter da = new MySqlDataAdapter(query, connection);
      				// データ取得
      				da.Fill(dt);
      				// データベース情報(行列)
      				Console.WriteLine("Rows: " + dt.Rows.Count);
      				Console.WriteLine("Columns: " + dt.Columns.Count);
      
      				// データテーブルの行列のデータを個別に取得
      				foreach (DataRow row in dt.Rows)
      				{
      					foreach (DataColumn column in dt.Columns)
      					{
      						Console.Write(row[column] + " ");
      					}
      					Console.WriteLine();
      				}
      
      				// 接続の解除
      				connection.Close();
      			}
      			catch (MySqlException me)
      			{
      				Console.WriteLine("ERROR: " + me.Message);
      			}
      		}
      	}
      }

      今回がんばるまんさんの質問を受けて本記事内容をチェックしてみたら、記事の内容が古くなっていたことに気づきました。
      現在わたしもVisualStudio 2019で試している最中です。
      MySQLとの接続準備など含め色々と変わってしまったので新しく記事を執筆している最中です。SQLを使ったデータの取得も含めて更新予定です。
      もうしばらくお待ちください。(誰も待っていないと思うけど…)

タイトルとURLをコピーしました