ASP.NET CoreでMySQLを使ってみる -接続

はじめに

今回は、ASP.NET CoreとMySQLの接続をやってみます。

Nugetパッケージの追加

プロジェクトは前回のものを使いまわしてもいいですし、新しく作ってもいいです。
sublimer.hatenablog.com

今回はaspdotnet-mysql-sampleという名前で新しくプロジェクトを作った前提で説明します。
以下のコマンドでパッケージを追加します。

$ dotnet add package MySql.Data --version 8.0.18

ドキュメントはこれです。
dev.mysql.com

MySQLのサーバーを動かす

サクッとDockerでやるのが楽です。
以下のコマンドで起動します。

$ docker run --rm -d -e MYSQL_ROOT_PASSWORD=mysql -p 43306:3306 --name mysql mysql:5.7

あとはコンテナの中に入って新しいデータベースを作成します。

$ docker exec -it mysql bash
# mysql -uroot -pmysql
mysql> CREATE DATABASE IF NOT EXISTS aspdotnet;
mysql> show databases;

MySQLに接続する

Pages/Index.cshtml.csに以下のように追記します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using MySql.Data.MySqlClient;

namespace aspdotnet_mysql_sample.Pages
{
    public class IndexModel : PageModel
    {
        private readonly String DBName = "aspdotnet";
        private readonly String DBHost = "127.0.0.1";
        private readonly String DBPort = "43306";
        private readonly String DBUser = "root";
        private readonly String DBPass = "mysql";
        private readonly ILogger<IndexModel> _logger;

        public IndexModel(ILogger<IndexModel> logger)
        {
            _logger = logger;
            String ConnectionString = $"server={DBHost};port={DBPort};uid={DBUser};pwd={DBPass};database={DBName}";
            MySqlConnection connection;
            try
            {
                connection = new MySqlConnection();
                connection.ConnectionString = ConnectionString;
                connection.Open();
                Console.WriteLine(connection.ServerVersion);
            }
            catch (MySqlException e)
            {
                Console.WriteLine(e.Message);
            }
        }

        public void OnGet()
        {

        }
    }
}

動作確認

前回と同様にアプリケーションを実行し、ブラウザでアクセスします。
アプリケーションのコンソールにMySQLのバージョンが出力されれば接続成功です。

おわりに

次回からはデータのCRUDなどについて実装していきます。