LoginSignup
3
0

More than 3 years have passed since last update.

C#とMySQLを接続してCRUD操作をしてみる

Last updated at Posted at 2021-02-27

環境

Windous10 HOME
Visual Studio 2019 Community
MySQL 8.0

やったこと

学習のためにVisual Studio C#でMySQLのCRUD操作ができるコンソールアプリを作成する。
※CRUD → CREATE、READ、UPDATE、DELETE

参考

https://qiita.com/yuzooho/items/5d608f3b84a2037cada0
https://qiita.com/kazumi75kitty/items/9953bb84edd7717bc90a
https://mikeda.hatenablog.com/entry/20090419/1240123566

上記を参考にさせていただきました。
ありがとうございます。

環境設定

  1. 「新しいプロジェクトの作成」からコンソールアプリ(.NET Framework)を選択して作成します。
    ※この時「C#」「Windows」「コンソール」と書かれている方選ばないと後々MySQLと接続できなくなります。

スクリーンショット (4).png

  1. 「参照」を右クリックして「参照の追加」を選択します。

スクリーンショット (8).png

参照マネージャーの検索でMySQLと入力して「MySql.data」にチェックして「OK」を選択する。

スクリーンショット (9).png

  1. MySQLのコマンドを起動してデータベース「test_database」を作成します。
MySQL
CREATE DATABASE test_database;

「test_database」が作成されているか確認します。

MySQL
SHOW DATABASES;

スクリーンショット (7).png

「test_database」が作成されました。

コードを記述

  1. CRUD操作を行うコードを記述していきます。
Program.cs

using System;
using MySql.Data.MySqlClient;// MySQLを使用


namespace MySQLテスト
{
    class Program
    {

        // MySQLへの接続情報
        private static readonly string server = "localhost";
        private static readonly string database = "test_database";//使用するデータベース
        private static readonly string user = "root";//ユーザー名
        private static readonly string pass = "password";//インストール時に設定したパスワード
        private static readonly string charset = "utf8";

        // MySQLへの接続
        private static readonly string connectionString = string.Format("Server={0};Database={1};Uid={2};Pwd={3};Charset={4}", server, database, user, pass, charset);

        // テーブル作成SQL
        private static readonly string MysqlTable = "test_table";//テーブル名
        private static readonly string CreateTableSql = "CREATE TABLE IF NOT EXISTS " + database + "." + MysqlTable + "(id int, name varchar(32), address varchar(32))";

        //データ挿入SQL
        private static readonly string InsertData = "(1, 'Tarou', 'Shinjuku'), (2, 'Hiroshi', 'Shibuya'), (3, 'Yumi', 'Setagaya'), (4, 'miku', 'Chiyoda')";//挿入するデータ
        private static readonly string InsertTableSql = "INSERT INTO " + MysqlTable + " (id, name, address) VALUES " + InsertData;

        //データ抽出用SQL
        private static readonly string SelectSql = "SELECT * FROM " + MysqlTable;//全てのカラムのデータを出力

        //データ更新用SQL
        private static readonly string UpdateSql = "UPDATE " + MysqlTable + " SET address = 'Meguro' WHERE name = 'Hiroshi'";//「Hiroshi」のaddressを「Meguro」に変更

        //データ削除用SQL
        private static readonly string DeleteSql = "DELETE FROM " + MysqlTable + " WHERE id = 4";//「id」が4のレコードを削除


        static void Main(string[] args)
        {
            try
            {
                // コネクションオブジェクトとコマンドオブジェクトの生成
                using (var connection = new MySqlConnection(connectionString))
                using (var command = new MySqlCommand())
                {
                    // コネクションオープン
                    connection.Open();


                    // テーブル作成SQLを実行
                    command.Connection = connection;
                    command.CommandText = CreateTableSql;
                    Console.WriteLine("テーブル「" + MysqlTable + "」を作成しました");
                    command.ExecuteNonQuery();
                    Console.WriteLine("続行するには何かキーを押してください");
                    Console.ReadKey();


                    // データ挿入用SQLを実行
                    command.Connection = connection;
                    command.CommandText = InsertTableSql;
                    Console.WriteLine("テーブル「" + MysqlTable + "」にデータ「" + InsertData + "」を挿入しました");
                    command.ExecuteNonQuery();
                    Console.WriteLine("続行するには何かキーを押してください");
                    Console.ReadKey();


                    // データ抽出SQLを実行
                    command.Connection = connection;
                    command.CommandText = SelectSql;
                    Console.WriteLine("テーブル「" + MysqlTable + "」のデータを出力します");

                    //カラム名を出力
                    MySqlDataReader reader = command.ExecuteReader();

                    string[] column = new string[reader.FieldCount];
                    for (int i = 0; i < reader.FieldCount; i++)
                        column[i] = reader.GetName(i);
                    Console.WriteLine(string.Join("\t", column));

                    //テーブルのデータを出力
                    while (reader.Read())
                    {
                        string[] row = new string[reader.FieldCount];
                        for (int i = 0; i < reader.FieldCount; i++)
                            row[i] = reader.GetString(i);
                        Console.WriteLine(string.Join("\t", row));
                    }
                    reader.Close();
                    Console.WriteLine("続行するには何かキーを押してください");
                    Console.ReadKey();


                    //データ更新SQL
                    command.Connection = connection;
                    command.CommandText = UpdateSql;
                    Console.WriteLine("ひろしの住所を目黒に変更しました");
                    command.ExecuteNonQuery();
                    Console.WriteLine("続行するには何かキーを押してください");
                    Console.ReadKey();


                    //データ削除SQL
                    command.Connection = connection;
                    command.CommandText = DeleteSql;
                    Console.WriteLine("idが4のデータを削除しました");
                    command.ExecuteNonQuery();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Console.ReadKey();
        }
    }
}

テーブル作成、データ挿入・抽出・更新・削除をキー入力で進めるプログラムです。

MySQLを確認しながら実行していく

MySQLのコマンドで確認しながら実行していきます。
Visual Studioで「デバッグ」から「デバッグなしで開始」を選択します。

無題.png

実行するとテーブル「test_table」が作成されます。
MySQLで確認します。

MySQL
USE test_database;

「test_database」にデータベースを切り替えます。

MySQL
SHOW TABLES;

スクリーンショット (11).png

「test_table」が作成されました。
コンソールに戻って進めます。

スクリーンショット (15).png

データが挿入されます。
MySQLで確認します。

MySQL
SELECT * FROM test_table;

スクリーンショット (16).png

挿入されました。
コンソールに戻って進めます。

スクリーンショット (12).png

テーブルのデータを出力しました。
先ほどMySQLで確認したデータと同じです。
このまま進めます。

スクリーンショット (13).png

「Hiroshi」の「address」が「Meguro」に変更されているか確認します

スクリーンショット (17).png

変更されました。
コンソールに戻って進めます。

スクリーンショット (14).png

id = 4のレコードが削除されているか確認します。

スクリーンショット (18).png

削除されてます。

感想

今回はC#でMySQLを操作する基本を学びました。
確認しながら操作することで直感的に理解できたと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0