0
0

#01 C# DBに関するユーティリティの作成 (DB接続編)

Posted at

C#によるDBに関するユーティリティ作成

開発環境

言語:C#
フレームワーク:.NET 8.0
開発ツール:Visual Studio 2022
ターゲットDB:MySQL

初めに

私自身勉強しつつ今後に役立つユーティリティを作成することを目的としています。
間違えている・改善が必要等ありましたら是非コメントよろしくお願いいたします。

なぜ作り始めたのか

まずは、C#の勉強を兼ねて何かプログラムを作ろうと考えた結果、
今後自分自身で開発を進めていく中で必ず必要になるものを作ろうということで、
DBに接続する共通処理の開発を始めました。

警告
あくまで私自身の認識で作成しているものです。参考にはできますが、信頼はできませんのでご注意ください

やりたいこと

  • DBの接続 ←今回はこちら
  • クエリの発行
  • クエリ結果の返却
  • トランザクションの管理
  • DB接続解除

DBの接続

DB接続には接続するための接続文字列が必要です。
各DBで違いますが、今回はMySQLをターゲットに作成していきます。

MySQLへ接続するための情報は、
サーバー名・データベース名・ユーザーID・パスワード
上記の4つになります。

  • サーバー名
    サーバー名はDBがおかれているサーバーのアドレスになります
    ローカルで作成している場合は「localhost」になります。
    もし、レンタルサーバーやAWS・Azure等のクラウドにサーバーを構築している場合はurlやIPの情報が入ります。

  • データベース名
    データベース名はDB作成時の名前になります。MySQLの場合は
    CREATE DATABASE [DB名] で作成した「DB名」を入れることになります。

  • ユーザーID
    ユーザーIDはDB接続時のユーザー名です。初期値はrootなどになります。
    自分自身で「CREATE USER [ユーザー名] IDENTIFIED BY 'auth_string'」をしている場合は
    「ユーザー名」を指定します。

  • パスワード
    DBに接続するためのパスワードになります。
    ユーザーIDとセットになり、rootユーザーの場合はDBの環境を整える際に設定したパスワードとなります。

上記の情報をもって、実際に接続情報の文字列を作成してみます。

設定情報
Server=[サーバー名];Database=[データベース名];Uid=[ユーザID];Pwd=[パスワード]
入力例
Server=ServerName;Database=DatabeseName;Uid=DatabeseUser;Pwd=DatabasePassword

のような形になります。これでDBの接続情報の作成が完了しました。

ただし、毎回変わる可能性のあるDB情報をプログラムの中で書き換えるのは少し面倒です。
今回は環境変数を利用した設定を行えるようにしていきます。

インフォメーション
あくまで汎用的にかつ、環境ごとに書き換える必要がないという観点で環境変数を使用しています。

参考にさせていただいた記事:環境ごとに違う接続先をどうするか

DbUtil
    // 環境変数から接続に必要な情報を取得
    string? server = Environment.GetEnvironmentVariable("DB_SERVER");
    string? database = Environment.GetEnvironmentVariable("DB_NAME");
    string? username = Environment.GetEnvironmentVariable("DB_USERNAME");
    string? password = Environment.GetEnvironmentVariable("DB_PASSWORD");

    string ConnectionString = $"Server={server};Database={database};Uid={username};Pwd={password};";
    

まずは、これでDB接続の情報を作成することができました。
軽く処理の説明をすると、

Environment.GetEnvironmentVariable()

環境変数のデータを取得するためのメソッドになります。
環境変数名を渡してあげることでデータの取得が行えます。

重要な情報の流出に注意
開発をgitやGitHubを利用して行う場合、コードをPUSHするとすべての情報を見ることができます。
ここで、設定ファイルやプログラムへのべた書きをしている場合重要な情報を公開することになります。
情報の取り扱いには十分注意してください

では、実際に接続情報を使ってDBへ接続をしてみましょう。

DB接続
    //using
    using MySql.Data.MySqlClient;

    public class DatabaseConnection
    {
        public DBConnection
            // 環境変数から接続に必要な情報を取得
            string? server = Environment.GetEnvironmentVariable("DB_SERVER");
            string? database = Environment.GetEnvironmentVariable("DB_NAME");
            string? username = Environment.GetEnvironmentVariable("DB_USERNAME");
            string? password = Environment.GetEnvironmentVariable("DB_PASSWORD");
            
            //接続情報文字列
            string ConnectionString = $"Server={server};Database={database};Uid={username};Pwd={password};";
            
            //MySQL接続のためのクラス
            MySqlConnection connection = new MySqlConnection(ConnectionString);
        
            //DBへ接続
            connection.Open();
        }
    }

接続の処理は上記で完了です。
今回は、MySQLへの接続のために、MySQL.Dataというパッケージを使用しています。

//MySQL接続のためのインスタンスを生成
MySqlConnection connection = new MySqlConnection(ConnectionString);

connection.Open()

たったこれだけでDBへの接続が完了します。※例外処理などは入れていません。

環境変数への設定などが必要なため大変かと思われますが、実際ローカルで開発するときには「.env」ファイルという環境設定のファイルを使用します。
書き方は以下のようになります。

.env
DB_SERVER=SERVERNAME
DB_NAME=DBNAME
DB_USERNAME=root
DB_PASSWORD=rootpassword

これを開発のソリューション内に配置させておくことで設定の読み込みを行うことができます。
今回は例外の考慮を行っていないため、実際に使う際には TryCatcなどで例外処理を行ってください。
※今後例外処理も記事として書き込む予定です。

以上、DB接続編でした。

次回はクエリ発行編です。ぜひよろしくお願いいたします。

0
0
3

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
0
0