Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9370

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

$
0
0

環境

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を操作する基本を学びました。
確認しながら操作することで直感的に理解できたと思います。


Viewing all articles
Browse latest Browse all 9370

Latest Images

Trending Articles