C# 開発者向け PostgreSQL チュートリアル:接続、読み取り、書き込み、削除

2024-07-27

C# で PostgreSQL に接続する方法

必要なもの

  • Npgsql NuGet パッケージ
  • .NET Framework 4.6 以降
  • PostgreSQL データベースサーバーがインストールおよび実行されていること

手順

  1. Npgsql をインストールする

    Npgsql NuGet パッケージをプロジェクトに追加します。 Visual Studio を使用している場合は、NuGet パッケージ マネージャーを使用してインストールできます。

    Install-Package Npgsql
    
  2. 接続文字列を作成する

    接続文字列は、PostgreSQL データベースサーバーへの接続情報を指定します。 以下の例では、localhost 上で実行されている mydb という名前のデータベースに接続します。

    var connectionString = "Host=localhost;Database=mydb;Username=postgres;Password=mypassword";
    
  3. 接続を開く

    NpgsqlConnection クラスを使用して、接続を開きます。

    using (var connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
        // データベース操作を実行する
    }
    
  4. データベース操作を実行する

    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();
    }
    
  5. 接続を閉じる

    接続が不要になったら、必ず 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}");
                    }
                }
            }
        }
    }
}

説明

  1. Npgsql.dll をプロジェクトに参照設定します。
  2. using Npgsql; ステートメントを使用して、Npgsql namespace をスコープ内に追加します。
  3. connectionString 変数に、PostgreSQL データベースサーバーへの接続情報を格納します。
  4. using (var connection = new NpgsqlConnection(connectionString)) ステートメントを使用して、データベースへの接続を開きます。
  5. using (var command = new NpgsqlCommand("SELECT * FROM mytable", connection)) ステートメントを使用して、mytable テーブルからすべてのレコードを選択する SQL クエリを作成します。
  6. using (var reader = command.ExecuteReader()) ステートメントを使用して、クエリを実行し、結果セットを取得します。
  7. while (reader.Read()) ループを使用して、結果セット内の各レコードを処理します。
  8. reader.GetInt32(0)reader.GetString(1) メソッドを使用して、レコードの ID と名前を取得します。
  9. 取得したデータを表示します。
  10. 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



PostgreSQL: GINインデックスとGiSTインデックスの代替手段

PostgreSQLでは、GINとGiSTという2種類の特殊なインデックスを使用できます。どちらのインデックスも、部分一致検索や複雑なデータ型に対するクエリのパフォーマンスを向上させるのに役立ちます。GINインデックス:インデックスサイズがGiSTより大きい...


データベースアプリケーションの監査証跡/変更履歴を残すための効果的な戦略

データベースアプリケーションにおいて、監査証跡(audit trail) と変更履歴(change history) は、データの整合性とセキュリティを確保するために不可欠です。監査証跡は、誰がいつどのような操作を行ったかを記録することで、不正なアクセスやデータの改ざんなどを検知し、追跡することができます。変更履歴は、データベースのスキーマやデータの変更内容を記録することで、データベースの進化を把握し、必要に応じて過去の状態に戻すことができます。...


データ量に負けない!C#でSQL Serverへの大量データ挿入を高速化するテクニック

メモリ使用量が少ない: データをバッファリングせずに直接データベースに書き込むため、メモリ使用量を抑えられます。効率的: データベースとの通信を最小限に抑え、サーバーリソースの負荷を軽減します。高速: 従来の INSERT ステートメントよりも大幅に高速なデータ転送速度を実現します。...


初心者でも安心!C#でSQLiteデータベースを操作するチュートリアル

ADO. NETは、.NET Frameworkに含まれるデータアクセス技術です。SQLite用のADO. NETプロバイダであるSystem. Data. SQLiteを使用することで、C#からSQLiteデータベースに接続してクエリを実行することができます。...


C#、.NET、SQL Server で `DBNull` 値を扱うためのベストプラクティス

ここでは、C#、.NET、SQL Server で DBNull 値を扱うためのベストプラクティスについて説明します。DBNull. Value プロパティを使うDBNull 値を扱う最も一般的な方法は、DBNull. Value プロパティを使うことです。DBNull...



SQL SQL SQL SQL Amazon で見る



C#/VB.NET プログラマー必見!T-SQL CAST デコードのすべて

T-SQL CAST は、データを異なるデータ型に変換する関数です。C#/VB. NET で T-SQL CAST を使用する場合、デコードが必要になることがあります。この解説では、T-SQL CAST のデコード方法について、C#/VB


C#データベース接続とレコードセットループ処理:パフォーマンスチューニング

データベースへの接続まず、使用するデータベースの種類に合った接続文字列を作成する必要があります。以下は、SQL Serverデータベースへの接続文字列の例です。接続文字列を作成したら、SqlConnectionクラスを使用してデータベースへの接続を開きます。


C#、ASP.NET、データベースで使える!LinqDataSource のレコード数制限テクニック

LinqDataSource は ASP. NET Web Forms で使用されるデータソースコントロールです。LINQ クエリを使用して、データベースからデータを取得することができます。Where 句を使用するWhere 句を使用して、取得するレコードを条件に絞り込むことができます。例えば、以下のコードは、データベースから Products テーブルの最初の 10 件のレコードを取得します。


C#、SQL、SQL Server でのストアドプロシージャとコード内の SQL のパフォーマンス比較

C#、SQL、SQL Server を使用する場合、SQL をストアドプロシージャに格納するか、コード内に直接記述するかを選択する必要があります。 どちらにも長所と短所があり、最適な選択はプロジェクトの要件によって異なります。ストアドプロシージャ


データベース移行の落とし穴!MySQLからPostgreSQLに移行する際の注意点

MySQLとPostgreSQLは、どちらもオープンソースのデータベース管理システム(DBMS)ですが、それぞれ異なる特徴と強みを持っています。MySQLは使いやすさと高速処理で知られる一方、PostgreSQLはより高度な機能と堅牢性を備えています。