C#からPostgreSQL・MySQLに接続する【Npgsql / MySqlConnector】

この記事のコードは .NET 10(C# 14)で動作を確認した内容です。接続情報(ホスト・ユーザー・パスワード)はご自身の環境に置き換えてください。パッケージのバージョンで書き方が変わることがあるので、最新は各公式ドキュメントも確認してください。

これまでの記事では SQLite を使ってきました。手軽で開発には最適ですが、本格的なアプリでは PostgreSQLMySQL といった本格的なデータベースを使う場面が増えます。

うれしいのは、C#側のコードはほとんど変わらないことです。接続する「ドライバー(プロバイダー)」を差し替えるだけで、DapperEF Core もそのまま使えます。この記事では、その差し替え方を見ていきます。

C#コード(Dapper / EF Core)接続先を変更プロバイダー差し替えSQLite / PostgreSQL / MySQL
図:上のロジックは共通のまま、接続プロバイダーだけを差し替える
目次

PostgreSQL に接続する(Npgsql)

C#からPostgreSQLを扱う定番ライブラリが Npgsql です。まずパッケージを入れます。

dotnet add package Npgsql

接続文字列で、ホスト・ポート・ユーザー・パスワード・データベース名を指定します。あとは NpgsqlConnection を開くだけ。接続オブジェクトが違うだけで、Dapperの使い方は SQLite のときと完全に同じです。

using Npgsql;
using Dapper;

var connString = "Host=localhost;Port=5432;Username=postgres;Password=yourpass;Database=sampledb";

using var conn = new NpgsqlConnection(connString);
conn.Open();

// Dapper はそのまま使える
var books = conn.Query<Book>("SELECT * FROM book ORDER BY title");
foreach (var b in books)
    Console.WriteLine($"{b.Id}: {b.Title}");

EF Core で使う場合は、SQLite用の代わりに PostgreSQL 用プロバイダーを入れて、UseNpgsql を呼ぶだけです。

dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options.UseNpgsql("Host=localhost;Port=5432;Username=postgres;Password=yourpass;Database=sampledb");

MySQL に接続する(MySqlConnector)

MySQL(や MariaDB)には、モダンで非同期対応の MySqlConnector がおすすめです。Oracle純正の MySql.Data もありますが、パフォーマンスと非同期対応で MySqlConnector を選ぶ人が増えています。

dotnet add package MySqlConnector

使い方はやはり同じで、MySqlConnection を開いて Dapper に渡すだけです。

using MySqlConnector;
using Dapper;

var connString = "Server=localhost;Port=3306;User ID=root;Password=yourpass;Database=sampledb";

using var conn = new MySqlConnection(connString);
conn.Open();

var books = conn.Query<Book>("SELECT * FROM book ORDER BY title");
foreach (var b in books)
    Console.WriteLine($"{b.Id}: {b.Title}");

EF Core で使う場合は、Pomelo.EntityFrameworkCore.MySql プロバイダーを入れて UseMySql を呼びます(サーバーのバージョン指定が必要です)。

dotnet add package Pomelo.EntityFrameworkCore.MySql
protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options.UseMySql(
        "Server=localhost;Port=3306;User ID=root;Password=yourpass;Database=sampledb",
        new MySqlServerVersion(new Version(8, 0, 36)));

接続文字列の扱いには注意

サンプルではパスワードを直接書いていますが、本番のコードに接続文字列(特にパスワード)を直書きしないのが鉄則です。appsettings.json や環境変数、開発中は User Secrets などに逃がして、ソースコードやGitに乗せないようにしましょう。

DBサーバーはどこに置く?

開発中は自分のPC(localhost)で十分ですが、公開するアプリでは PostgreSQL や MySQL をサーバー上で動かすことになります。手頃なのがVPSです。Ubuntu のVPSを1台用意すれば、そこにDBサーバーを立てて、C#アプリから接続できます。

VPSの初期設定は、別記事にまとめています。DBを外部公開するときは、ファイアウォール(ufw)やアクセス制限をきちんとかけてから使ってください。

👉 参考:Ubuntu 26.04 LTSのインストールと初期設定|VPSで最初にやること

まとめ

C#のDBアクセスは、接続プロバイダーを差し替えるだけで、SQLiteでもPostgreSQLでもMySQLでも同じように書けるのが強みです。

  • PostgreSQL → Npgsql(EF Coreは Npgsql.EntityFrameworkCore.PostgreSQL
  • MySQL → MySqlConnector(EF Coreは Pomelo.EntityFrameworkCore.MySql
  • Dapper / EF Core のコード本体はほぼ変わらない
  • 接続文字列は直書きせず、設定ファイルや環境変数へ

どのORM・どのDBを選ぶかの全体像は、次の使い分けガイドで整理しています。

👉 あわせて読みたい:C#でデータベースを扱う完全ガイド(ADO.NET・Dapper・EF Core・SqlKataの使い分け)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コスト最小で制作をしたいという意識強め(笑)

コメント

コメントする

目次