[.net core 3.0] MySqlへのアクセス (生SQL)

このWordPressブログなんだけど、フロント側だけ.net coreで実装したい。なので、MySqlにアクセスしてデータ取ってくるところまでを書く。EFではなく生SQL使いたいのでそんな人が入れば。

NugetでMySql.Data 8.0.18を追加。Oracleさん公式なので安心。ほんとかよ。

ex) https://dev.mysql.com/doc/dev/connector-net/6.10/html/N_MySql_Data_MySqlClient.htm

こんなテーブルを全件取得。

MariaDB [benchmark]> select * from member;
+-----------+-------------+--------------------+------------+---------------------+---------------------+
| member_id | member_name | email              | birthday   | created_at          | updated_at          |
+-----------+-------------+--------------------+------------+---------------------+---------------------+
|         1 | 雨宮天      | hoge@dobusarai.net | 1993-08-28 | 2019-09-30 15:16:52 | 2019-09-30 15:19:39 |
|         2 | 麻倉もも    | fuga@dobusarai.net | 1994-06-25 | 2019-09-30 15:16:52 | 2019-09-30 15:16:52 |
|         3 | 夏川椎菜    | piyo@dobusarai.net | 1996-07-18 | 2019-09-30 15:16:52 | 2019-09-30 15:16:52 |
+-----------+-------------+--------------------+------------+---------------------+---------------------+
3 rows in set (0.36 sec)
using System;
using System.Data;
using MySql.Data.MySqlClient;

namespace CliTool {
    class Program {
        static void Main(string[] args) {
            var cString     = "Host=localhost;Database=benchmark;CharSet=utf8mb4;User Id=root;Password=";
            var query       = "select * from member";
            var datatable   = new DataTable();
            using(var con = new MySqlConnection(cString)) {
                using var adapter = new MySqlDataAdapter {
                    SelectCommand = new MySqlCommand(query, con)
                };
                adapter.Fill(datatable);
            }
            foreach(var column in datatable.Columns) {
                Console.Write(column.ToString() + " ");
            }
            Console.WriteLine(string.Empty);
            foreach(var row in datatable.Select()) {
                Console.WriteLine(string.Format("{0} {1} {2} {3} {4} {5}", row[0], row[1], row[2], row[3], row[4], row[5]));
            }

            /* end */
            Console.WriteLine("Press Any key to continue...");
            Console.ReadKey(true);
        }
    }
}
member_id member_name email birthday created_at updated_at
1 雨宮天 hoge@dobusarai.net 1993/08/28 0:00:00 2019/09/30 15:16:52 2019/09/30 15:19:39
2 麻倉もも fuga@dobusarai.net 1994/06/25 0:00:00 2019/09/30 15:16:52 2019/09/30 15:16:52
3 夏川椎菜 piyo@dobusarai.net 1996/07/18 0:00:00 2019/09/30 15:16:52 2019/09/30 15:16:52
Press Any key to continue...

PHPに慣れちゃったせいでDataTable使いづらく感じるが、sqlに頼らずにクエリ使えるので慣れれば便利なはず。というかサンプル探しててもDataRowをforeachで回さずにindex指定してるのが多くてなんでや?とデバッグしつつ色々触ってみたのだが、enumerableじゃないんだね。