C#でMySQL

C#の.net(Core)で MySQLにつなぐ

C#の.net MySQL接続

C#でMySQLに接続します。今回は .net frameworkではなく新しい .netの方です。なのでDataSetは使いません。

MySQLはxamppを流用

今回はMySQLはphpの授業で使ったxamppに入っていたのでこれを流用します。xamppのインストール等はいっぱい紹介されてますし、簡単なので省略します。

データベースといてmydbを作成し、テーブルとしてbtempを入れます。

データベース設計

データベースは前回SQL Serverで作ったものと同じにします。プライマリーキーにIDが自動採番で作成されるようにして、後は日付と体温を入れます

項目名フィールド型
id 数値 AutoField
edate 計測した日付 DateField
btemp body temp体温 FloatField

c#のプロジェクトを作ります

新規にC#のプロジェクト作成

Visual Studioを立ち上げて、新しいプロジェクトを作成していきます。

新規プロジェクトを作成します。

プロジェクト作成

.NETのformアプリケーションを選択します。似たものがいっぱいあるので間違わないようにしてください。.net frameworkではない方です。

プロジェクトの名前を設定します。csCoreMySQLtest1としました。

ではFormを作っていきましょう。FormにはListViewとボタンを貼り付けます

Form 作成

さて、MySQLに接続するにはライブラリーを追加しないといけません。

Visual Studioでは、必要なイブラリーはNuGetから取得するようになっています。

NuGetライブラリー

最初取得済みのリストがでるので参照に切り替えて「MySql」を検索して、最初に出てくるMySQL.Dataを選択

MySQL.Dataライブラリー

プロジェクトにチェックを入れて「インストール」します

MySQL.Data Install

これでMySQLへの接続が使えるようになるので、コーディングしていきます

Form1.cs
    using MySql.Data.MySqlClient;

    namespace CsCoreMySQLTest1
    {
        public partial class Form1 : Form
        {
            public String sql = "Select * from btemp";
            public String ConnectionString  =
                "Server=127.0.0.1;"
                + "Port=3306;"
                + "Database=mydb;"
                + "User ID=root;"
                + "Password=12345;";
            public Form1()
            {
                InitializeComponent();
            }
    
            private void btnDir_Click(object sender, EventArgs e)
            {
                listView1.Items.Clear();
                listView1.View = View.Details;
    
                listView1.Columns.Add("id");
                listView1.Columns.Add("temp");
                listView1.Columns.Add("date");
                listView1.Columns[0].Width = 100;
                listView1.Columns[1].Width = 200;
                listView1.Columns[2].Width = 300;
    
                try
                {
                    using( MySqlConnection conn = new MySqlConnection(ConnectionString))
                    {
                        conn.Open();
                        using( MySqlCommand cmd = new MySqlCommand(sql, conn))
                        {
                            using( MySqlDataReader reader = cmd.ExecuteReader())
                            {
                                while(reader.Read())
                                {
                                    ListViewItem item = new ListViewItem();
                                    item.Text = reader.GetDecimal(0).ToString();
                                    item.SubItems.Add(reader.GetFloat(1).ToString());
                                    item.SubItems.Add(reader.GetDateTime(2).Date.ToString("yyyy/MM/dd"));
                                    listView1.Items.Add(item);
                                }
                            }
                        }
                    }
                } catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }
    

MySQLは3306ポートへの接続です。今回はListViewでやりましたので、各列の設定をして、reader.Read()で1行読んでは貼り付けで読むことができました。