データベースはデータの集合体の事を言います。データベースには、ただデータを蓄積するだけでなく、そのデータを活用して様々なサービスを提供することが可能です。
今回はデータベースの1種である「MySQL」をC#で扱う方法について紹介します。
MySQLについて理解を深めつつ、C#で操作する方法をサンプルを交えて紹介しています。
ぜひ最後まで読んでみてください。
MySQLとは
MySQL(マイ・エスキューエル)は世界中で広く利用されているオープンソースのデータベースの1つです。
現在、米国のOracle(オラクル)社が開発・提供を行っており、無償のGPLライセンスと、商用ライセンスがあります。基本的には無償で使用することが可能です。
MySQLはRDB(リレーショナルデータベース)なので、行と列によって構成された「表形式のテーブル」でデータを管理するデータベースです。
この構造にすることで、データの挿入・更新・削除などの操作をする際、大量のデータを安全かつ高速に取り扱うことが可能になります。この操作をするための言語を「SQL」と呼び、MySQLはSQLで動いています。
また、データベースの人気度調査では数あるデータベースの中でも人気が高いデータベースです。
ランキング | DBMS |
1位 | Oracle |
2位 | MySQL |
3位 | Microsoft SQL Server |
4位 | PostgreSQL |
5位 | MongoDB |
※2022年2月現時点(参考サイト:DB-Engines Ranking)
MySQLの特徴
MySQLには以下のような特徴があります。これらの特徴があることから、データベースの中でも人気があるとも言えるでしょう。
- ちいさなアプリケーションから大規模まで幅広く対応できる。
- オープンソースで基本的に無料で利用できる。
- Linux、Windows、Mac OS Xなど複数のOSで利用ができる。
- 世界中で最も使用されるCMSであるWordPressに強い。
- データベース管理システムの大手企業である Oracle が開発している。
MySQL専用の管理ツールがあり、これらのツールを使うことでデータベースに登録されているデータを閲覧することが可能です。いずれもLinux、Windows、Mac OS X で利用可能です。
phpMyAdmin
MySQLの操作をWebブラウザ上から行えます。データのエクスポートやインポートが可能です。(参考サイト:ダウンロードサイト)
MySQL Workbench
こちらもMySQLの機能をWebブラウザから操作できる管理ツールです。(参考サイト:ダウンロードサイト)
MySQLのインストール方法
実際に無料で提供されているMySQLをWindows環境にインストールしてみましょう。
まずはダウンロードページにアクセスします。
ダウンロードページで最新のバージョンを選択して、「Download」ボタンをクリックします。
「Download」ボタンは2つありま。ネット環境の有無でどれを選択するか決めましょう。今回はネット環境下でのダウンロードを行いました。
- mysql-installer-web-community:ネット環境下でのダウンロードする場合に選択する。
- mysql-installer-community:オフラインでダウンロードする場合に選択する。
[chat face=”icon.png” name=”名無し君” align=”left” border=”blue” bg=”none” style=”maru”]ログインを求めれるので、オラクルのアカウントをお持ちの方はログインをするかお持ちではない方は新規登録を行います。[/chat]
画面の左下の「No thanks, just start my download.」からログインせずにダウンロードすることも可能です。
インストーラーを起動してインストールする
はじめにセットアップ方法を選択するインストーラーの画面が表示されます。
「Developer default」を選択します。
不要なアプリケーションのダウンロードを避けたい場合は、「Custom」から必要なものだけインストールをするように設定しましょう。
「Execute」ボタンをクリックすると、インストールが開始されます。
インストールが完了したら、インストール後の設定画面へ遷移します。
「Product Configurarion」では特に設定する項目はないので、「Next」ボタンをクリックします。
「Type andType and Networking」では、デフォルトの設定でいいので、「Next」ボタンをクリックします。
「Authentication Method」では上の(RECOMMENDED)と書かれた方を選択して「Next」ボタンをクリックします。
「Accounts and roles」では、Rootアカウントのパスワードを2回入力して、「Next」ボタンをクリックします。
「Windows Service」では、Windowsのサービスとして動作させるかどうかを聞かれます。今回はWindows向けの開設なので、そのまま「Next」ボタンをクリックします。
「Apply Configuration」では、最終確認をして「Execute」ボタンをクリックします。
これでインストール作業は完了です。
パッケージのインストール
MySQLを使う為にNuGetからパッケージのインストールをしましょう。
SQLiteをインストールしたいプロジェクトをVisual Studioで開きます。メニューバーから「ツール」>「NuGetパッケージマネージャ」>「ソリューションのNuGetパッケージの管理」の順に選択をします。
NuGetパッケージの管理画面で参照タグをクリックし、検索欄に「MySQL」と入力して検索をします。
検索ワードに関連するパッケージ一覧の中から、「MySql.Data」をクリックし、「インストール」ボタンをクリックしてインストールを行います。
インストールが終わったら、Visual Studioの「ソリューション エクスプローラー」の参照欄を確認します。
参照の一覧に「MySql.Data」が追加されていれば完了です。
MySQLの使い方
それではMySQLを使って、データベースやテーブルの作成、データの登録・更新・削除等を紹介します。
まずは、MySQLを扱うために以下の名前空間を定義しておきましょう。
//参照先を追加
using MySql.Data.MySqlClient;
これでソースコード内で名前空間を省略して記述ができるようになります。
MySQLの基本構文
MySQLへの接続情報(server名やport番号等)を設定し、MySQLへ接続、コマンド登録、コマンドの実行の順番に処理を記述します。
接続情報の設定
MySQLコマンドは、データベースの設定に合わせてホスト名やユーザー名、パスワードオプション、必要に応じてデータベース名を加えて使用する場合が多いです。
設定項目 | 内容 |
Server | TCP/IPのIPアドレスまたはドメイン名を指定する。 |
Port | TCP/IPのポート番号を指定する。 |
Username | 接続するユーザーの名前を指定する。 |
Password | 接続するユーザーのパスワードを指定する。 |
Database | クエリーを実行するデータベースを指定する。 |
Protocol(任意) | サーバーへの接続に使用するプロトコルを指定する。「TCP」、「SOCKET」、「PIPE」、「MEMORY」のいずれかを指定する。 |
Charset(任意) | 文字コードを変更する場合に指定する。 |
上記を踏まえて、C#で接続情報を記述すると次のようになります。
// MySQLへの接続情報を設定
var server = "127.0.0.1"; // Hosename
var port = 3306; // Port
var user = "root"; // Username
var pass = "12345"; // Password
var charset = "utf8"; // Encode
var connectionString = $"Server={server};Port={port};Username={user};Password={pass};Charset={charset};";
操作したいデータベースが決まっている場合は、接続情報にデータベースを追加しましょう。
MySQLへ接続
MySQLへ接続するには、MySqlConnectionクラスを使います。
MySqlConnectionのインスタンスを生成時に、コンストラクタに接続情報を引数として渡します。
接続情報を元にデータベースへ接続する為に、Openメソッドを呼び出してあげれば接続することが可能です。
MySqlConnectionを使用する際の注意点として、スコープ外になった場合は閉じることができないので、CloseメソッドまたはDisposeメソッドを呼び出して明示的に閉じる必要があります。
[chat face=”icon.png” name=”名無し君” align=”left” border=”blue” bg=”none” style=”maru”]C#ではusingステートメントを用いる事で、CloseやDisposeを書かなくても自動的に破棄してくれます。[/chat]
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
// MySQLへ接続
connection.Open();
}
これでデータベースを開くことができます。
コマンド登録と実行
まずはコマンドを登録する為に、MySqlCommandのオブジェクトを作成します。
MySqlCommandのCommandTextプロパティにMySQLで実行するSQLステートメント(命令文)を設定します。
あとはSQLステートメントを実行するメソッドを呼び出して実行します。
SQLステートメントを実行するメソッドには以下があります。
設定項目 | 内容 |
ExecuteNonQuery() | SQLステートメントを実行した際、値を返さない場合に使用する。UPDATE、INSERT、DELETE 等が該当する。 |
ExecuteScalar() | SQLステートメントを実行した際、値を返す場合に使用する。ただし、返された値の最初の行にある最初の列を返す。 |
ExecuteReader() | SQLステートメントを実行した際、値を返す場合に使用する。SELECT 等が該当する。 |
ここではExecuteNonQuery()を用いた例を紹介します。
using (var commnad = connection.CreateCommand())
{
// クエリーの実行処理
commnad.CommandText = query;
commnad.ExecuteNonQuery();
}
クエリー実行メソッド作成
上記で紹介したコードをまとめて、関数を作成します。
以降で紹介するサンプルはこの関数を使っています。
public void ExecuteNonQuery(string query)
{
// MySQLへの接続情報を設定
var server = "127.0.0.1"; // Hosename
var port = 3306; // Port
var user = "root"; // Username
var pass = "zxcvbnm"; // Password
var charset = "utf8"; // Encode
var connectionString = $"Hostname={server};Port={port};Username={user};Password={pass};Charset={charset};";
try
{
using (MySqlConnection connection = new MySqlConnection(connectionString))
using (var commnad = connection.CreateCommand())
{
// MySQLへ接続
connection.Open();
// クエリーの実行処理
commnad.CommandText = query;
commnad.ExecuteNonQuery();
//var value = command.ExecuteNonQuery();
//MessageBox.Show($"更新されたレコード数は {value} です。");
}
}
catch (Exception ex)
{
//例外が発生した時はメッセージボックスを表示
MessageBox.Show(ex.Message);
}
}
ExecuteNonQueryメソッドは戻り値として、INSERT・UPDATE・DELETEのSQL文を実行して影響を受けたレコード数を返します。
データベースの作成
CREATE文を使ってテーブルを作成します。CREATE DATABASE文の書き方は以下の通りです。
CREATE DATABASE [データベース名];
例として「sample_db」という名称のデータベースを作成します。
public void CreateDatabase()
{
var query = "CREATE DATABASE sample_db;";
ExecuteNonQuery(query);
}
実行結果を「MySQL Workbench」で確認してみましょう。このツールはMySQLと同時にインストールされていると思います。インストールされていない場合はこちらからダウンロードしてインストールしてください。
「Navigator」の「Schemas」タブをクリックします。
先ほど作成した「sample_db」というデータベースが作成できている事が確認できます。
テーブルの作成
CREATE文を使ってテーブルを作成します。CREATE TABLE文の書き方は以下の通りです。
CREATE TABLE [テーブル名] (
カラム名1 データ型1 オプション1,
カラム名2 データ型2 オプション2,…);
カラム名には最大64バイトまで設定することが可能です。またプライマリーキーを設定する場合は、オプション部分に「PRIMARY KEY」を追加します。
テーブルはデータベースに作成するので、どのデータベースへ接続するのかをMySQLの接続情報に明示しておく必要があります。
[chat face=”icon.png” name=”名無し君” align=”left” border=”blue” bg=”none” style=”maru”]ここでは先ほど作成したデータベース「sample_db」へ接続します。[/chat]
// MySQLへの接続情報を設定
var server = "127.0.0.1"; // Hosename
var port = 3306; // Port
var user = "root"; // Username
var pass = "zxcvbnm"; // Password
var charset = "utf8"; // Encode
var database = "sample_db"; // Database
var connectionString = $"Server={server};Port={port};Username={user};Password={pass};Charset={charset};Database={database}";
例として「sample_table」という名称のデータベースを作成します。
public void CreateTable()
{
var query = new StringBuilder();
query.Append("CREATE TABLE sample_table(");
query.Append("id INT PRIMARY KEY,");
query.Append("name TEXT,");
query.Append("datetime DATETIME,");
query.Append("user CHAR(5)");
query.Append(");");
ExecuteNonQuery(query.ToString());
}
実行結果を「MySQL Workbench」で確認してみましょう。
テーブルが作成されていることが確認できます。
データの登録
INSERT文を使ってテーブルへデータを登録します。INSERT文の書き方は以下の通りです。
CREATE TABLE [テーブル名] (カラム名1,カラム名2…)
VALUES (値1,値2…);
指定したカラムに抜けがあった場合、その項目にはデフォルト値が設定されます。
public void InsertRecord(int id, string name, DateTime dateTime, string user)
{
var query = "INSERT INTO sample_table (id,name,datetime,user) VALUES (" +
$"{id},'{name}','{dateTime}',{user})";
ExecuteNonQuery(query);
}
この関数を使ってレコードを登録してみます。
InsertRecord(1, "yamada", DateTime.Now.AddMinutes(0), "83788");
InsertRecord(2, "suzuki", DateTime.Now.AddMinutes(1), "12894");
InsertRecord(3, "tanaka", DateTime.Now.AddMinutes(2), "46343");
InsertRecord(4, "sakata", DateTime.Now.AddMinutes(3), "38397");
実行結果を「MySQL Workbench」で確認してみましょう。
テーブルにレコードが正常に登録されています。
レコードの削除
DELETE文を使ってテーブルに登録されているレコードを削除します。DELETE文の書き方は以下の通りです。
DELETE FROM [テーブル名] WHERE 削除条件
public void DeleteRecord(string column, string word)
{
var query = "DELETE FROM sample_table WHERE " +
$"{column} = '{word}'";
ExecuteNonQuery(query);
}
この関数を使ってテーブルに登録されているレコードを削除する例が以下になります。
DeleteRecord("id", "1");}
実行結果を「MySQL Workbench」で確認してみましょう。
idの1が登録されていたレコードが削除されていることが確認できます。
テーブルの削除
DROP文を使ってテーブルを削除します。DROP文の書き方は以下の通りです。
DROP TABLE [テーブル名]
public void DropTable(string column, string word)
{
var query = "DROP TABLE sample_table;";
ExecuteNonQuery(query);
}
データの検索
SELECT文を使って登録されているデータを検索します。SELECT文の書き方は以下の通りです。
SELECT * FROM [テーブル名] WHERE 検索条件 ORDER BY カラム ASC or DESC
SELECT文は、ExecuteNonQueryではなくExecuteReaderを使います。ExecuteReaderの戻り値は、Readメソッドで読み出します。
SELECT文は値を返しますが、usingでマークしたオブジェクトはスコープを抜けた段階で破棄されるので、検索した結果を使い回す場合は、一旦コレクションに格納するのがいいでしょう。
public List ExecuteReader(string query)
{
//検索条件に一致したレコードを格納するコレクション
var Datas = new List();
// MySQLへの接続情報を設定
var server = "127.0.0.1"; // Hosename
var port = 3306; // Port
var user = "root"; // Username
var pass = "zxcvbnm"; // Password
var charset = "utf8"; // Encode
var database = "sample_db"; // Encode
var connectionString = $"Server={server};Port={port};Username={user};Password={pass};Charset={charset};Database={database}";
try
{
using (MySqlConnection connection = new MySqlConnection(connectionString))
using (var commnad = connection.CreateCommand())
{
// MySQLへ接続
connection.Open();
// クエリーの実行処理
commnad.CommandText = query;
using (var reader = commnad.ExecuteReader())
{
while (reader.Read())
{
Datas.Add(new Data
{
Id = reader.GetInt32("id"),
Name = reader.GetString("name"),
Datetime = reader.GetDateTime("datetime"),
User = reader.GetString("user")
});
}
}
}
}
catch (Exception ex)
{
//例外が発生した時はメッセージボックスを表示
MessageBox.Show(ex.Message);
}
return Datas;
}
class Data
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime Datetime { get; set; }
public string User { get; set; }
}
この関数を使ってテーブルに登録されているレコードを検索する例が以下になります。
var result = ExecuteReader("SELECT * FROM sample_table;");
foreach (var ret in result)
{
//検索結果を表示
Debug.WriteLine($"{ret.Id},{ret.Name},{ret.Datetime},{ret.User}");
}
実行結果は次のようになります。
まとめ
この記事ではMySQLの使用方法について紹介をしました。
レコードの登録・取得・削除・更新には以下の4つ構文があり、この構文を扱えれば、データベースの操作ができます。
構文 | 読み方 | 機能 |
SELECT | セレクト | 値の取得 |
UPDATE | アップデート | 値の変更 |
INSERT | インサート | レコードの追加 |
DELETE | デリート | レコードの削除 |
MySQLの操作言語は「SQL」であるため、MySQLをマスターすれば、他のデータベースも基本的な部分は共通して扱うことができるでしょう。
この記事を参考にして、C#でMySQLを使って頂ければ幸いです。
以上、最後まで読んでいただきありがとうございました。