C# 開発者向け PostgreSQL チュートリアル:接続、読み取り、書き込み、削除
C# で PostgreSQL に接続する方法
必要なもの
- Npgsql NuGet パッケージ
- .NET Framework 4.6 以降
- PostgreSQL データベースサーバーがインストールおよび実行されていること
手順
-
Npgsql をインストールする
Npgsql NuGet パッケージをプロジェクトに追加します。 Visual Studio を使用している場合は、NuGet パッケージ マネージャーを使用してインストールできます。
Install-Package Npgsql
-
接続文字列を作成する
接続文字列は、PostgreSQL データベースサーバーへの接続情報を指定します。 以下の例では、
localhost
上で実行されているmydb
という名前のデータベースに接続します。var connectionString = "Host=localhost;Database=mydb;Username=postgres;Password=mypassword";
-
接続を開く
NpgsqlConnection
クラスを使用して、接続を開きます。using (var connection = new NpgsqlConnection(connectionString)) { connection.Open(); // データベース操作を実行する }
-
データベース操作を実行する
NpgsqlCommand
クラスを使用して、データベース操作を実行します。データの読み取り
using (var command = new NpgsqlCommand("SELECT * FROM mytable", connection)) { using (var reader = command.ExecuteReader()) { while (reader.Read()) { int id = reader.GetInt32(0); string name = reader.GetString(1); Console.WriteLine($"ID: {id}, Name: {name}"); } } }
データの追加
using (var command = new NpgsqlCommand("INSERT INTO mytable (name, email) VALUES (@name, @email)", connection)) { command.Parameters.AddWithValue("@name", "John Doe"); command.Parameters.AddWithValue("@email", "[email protected]"); command.ExecuteNonQuery(); }
データの更新
using (var command = new NpgsqlCommand("UPDATE mytable SET name = @name WHERE id = @id", connection)) { command.Parameters.AddWithValue("@name", "Jane Doe"); command.Parameters.AddWithValue("@id", 123); command.ExecuteNonQuery(); }
データの削除
using (var command = new NpgsqlCommand("DELETE FROM mytable WHERE id = @id", connection)) { command.Parameters.AddWithValue("@id", 123); command.ExecuteNonQuery(); }
-
接続を閉じる
接続が不要になったら、必ず
Close()
メソッドを使用して接続を閉じます。connection.Close();
リソース
- Npgsql は、ストアド プロシージャ、パラメーター化されたクエリ、バッチ処理など、PostgreSQL の多くの機能をサポートしています。
- トランザクションを使用して、複数のデータベース操作を原子的に実行できます。
- 接続プールを使用して、データベースへの接続を再利用できます。
注意
- データベース操作を実行する前に、適切なエラー処理を実装してください。
- パスワードを含む接続文字列をコードに埋め込まないようにしてください。代わりに、環境変数または設定ファイルを使用してください。
using System;
using Npgsql;
class Program
{
static void Main(string[] args)
{
// 接続文字列
var connectionString = "Host=localhost;Database=mydb;Username=postgres;Password=mypassword";
using (var connection = new NpgsqlConnection(connectionString))
{
connection.Open();
// レコードを読み取る
using (var command = new NpgsqlCommand("SELECT * FROM mytable", connection))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
Console.WriteLine($"ID: {id}, Name: {name}");
}
}
}
}
}
}
説明
Npgsql.dll
をプロジェクトに参照設定します。using Npgsql;
ステートメントを使用して、Npgsql namespace をスコープ内に追加します。connectionString
変数に、PostgreSQL データベースサーバーへの接続情報を格納します。using (var connection = new NpgsqlConnection(connectionString))
ステートメントを使用して、データベースへの接続を開きます。using (var command = new NpgsqlCommand("SELECT * FROM mytable", connection))
ステートメントを使用して、mytable
テーブルからすべてのレコードを選択する SQL クエリを作成します。using (var reader = command.ExecuteReader())
ステートメントを使用して、クエリを実行し、結果セットを取得します。while (reader.Read())
ループを使用して、結果セット内の各レコードを処理します。reader.GetInt32(0)
とreader.GetString(1)
メソッドを使用して、レコードの ID と名前を取得します。- 取得したデータを表示します。
connection.Close();
ステートメントを使用して、データベースへの接続を閉じます。
- このコードは、エラー処理を実装していません。本番環境で使用する場合、適切なエラー処理を実装する必要があります。
- このコードは、PostgreSQL データベースサーバーが
localhost
上で実行されていることを想定しています。 接続文字列を自分の環境に合わせて変更する必要があります。
ADO.NET (Active Directory Data Object .NET) は、.NET Framework でデータアクセスを提供する標準的なフレームワークです。 ADO.NET を使用して PostgreSQL に接続するには、Npgsql用の ADO.NET データ プロバイダを使用する必要があります。
長所
- ADO.NET は、接続プーリング、トランザクション、コマンド パラメータ化など、多くの機能をサポートしています。
- ADO.NET は、.NET Framework で広く使用されているため、多くの開発者に馴染みがあります。
短所
- Npgsql よりも複雑で習得するのが難しい場合があります。
- Npgsql よりもパフォーマンスが劣る場合があります。
Entity Framework
Entity Framework は、.NET Framework 用のオブジェクト リレーショナル マッピング (ORM) フレームワークです。 Entity Framework を使用すると、データベース エンティティを C# オブジェクトとしてモデル化し、コードからそれらのオブジェクトを操作できます。
- コードの保守性を向上させることができます。
- データベースとの複雑なやり取りをカプセル化できます。
- 学習曲線が急です。
Dapper
Dapper は、軽量で高性能なマイクロ ORM です。 Dapper は、シンプルな API を提供し、生の SQL クエリを使用してデータベースとやり取りできるようにします。
- 習得して使用するのが簡単です。
- Npgsql と ADO.NET よりもパフォーマンスが優れています。
- トランザクションや接続プーリングなどの機能を自分で実装する必要があります。
- Entity Framework ほど機能が豊富ではありません。
Npgsql は、C# から PostgreSQL に接続するための最も一般的で人気のある方法です。 しかし、他の方法もそれぞれ長所と短所があり、状況によってはより適している場合があります。
選択のヒント
- パフォーマンスが最も重要な場合は、Dapper を検討してください。
- 開発者の生産性を向上させ、コードの保守性を向上させたい場合は、Entity Framework を検討してください。
- すでに ADO.NET または Entity Framework に精通している場合は、それらのフレームワーク用の PostgreSQL データ プロバイダを使用することを検討してください。
c# postgresql