0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ASP.NETコンソールアプリとPostgreSQLを接続する方法

Posted at

あんまりないと思いますが、コンソールアプリからデータベースに接続する方法について記載しておきます。
今回は、外部ファイルappsettings.jsonを使ってこのファイルにデータベース情報を記載します。
Program.csはこの設定ファイルappsettings.jsonからデータベース情報を取得するようにします。

パッケージのインストール

Npgsqlのインストール

C#でPostgreSQLと接続するには、Npgsqlというライブラリを使用します。

dotnet add package Npgsql

Configurationパッケージ等のインストール

設定ファイル(appsettings.json)からデータベース情報を取得するために、以下のNuGetパッケージをインストールする必要があります。

1.Microsoft.Extensions.Configuration - 設定ファイルを扱うためのパッケージ。

2.Microsoft.Extensions.Configuration.Json - JSON形式の設定ファイルを読み込むためのパッケージ。

3.Microsoft.Extensions.DependencyInjection - DIコンテナを使うためのパッケージ(必要に応じて)。

dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.Json
dotnet add package Microsoft.Extensions.DependencyInjection

appsettings.json の作成

プロジェクトのルートに appsettings.json ファイルを作成します。このファイルには、PostgreSQLの接続情報を保存します。

appsettings.json
{
  "ConnectionStrings": {
    "PostgreSQL": "Host=localhost;Username=your_username;Password=your_password;Database=your_database"
  }
}

全体のソースコードは、下記です。

Program.cs
using Microsoft.Extensions.Configuration;
using Npgsql;
using System;
using System.IO;

class Program 
{
    static void Main(string[] args) 
    {
        //appsettings.jsonから設定情報を読み込む
        var configuration = new ConfigurationBuilder().
                SetBasePath(Directory.GetCurrentDirectory()).
                AddJsonFile("appsettings.json",optional:false,reloadOnChange:true).
                Build();

        //接続情報を取得する
        string connString = configuration.GetConnectionString("PostgreSQL");
        
        //PostgreSQLに接続
        using (var conn = new NpgsqlConnection(connString)) 
        {
            try
            {
                conn.Open();//接続を開く
                Console.WriteLine("データベース接続しました。");
                string sql = "SELECT * FROM public.\"Books\";";
                using (var cmd = new NpgsqlCommand(sql, conn))
                using (var reader = cmd.ExecuteReader()) 
                {
                    //データがある場合
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            int id = reader.GetInt32(0);
                            string title = reader.GetString(1);
                            string description = reader.GetString(2);
                            Console.WriteLine($"ID: {id}, Title: {title}, Author: {description}");
                        }
                    }
                    else 
                    {
                        Console.WriteLine("データが見つかりませんでした。");
                    }
                }
            }
            catch (Exception ex) 
            {
                Console.WriteLine($"接続に失敗しました。{ex.Message}");
            }
        }
    }
}


トラブルシューティング

System.IO.FileNotFoundException: 'The configuration file 'appsettings.json' was not found and is not optional.

エラーメッセージ System.IO.FileNotFoundException: 'The configuration file 'appsettings.json' was not found and is not optional. が出ているということは、Visual Studioが実行時に appsettings.json ファイルを見つけられないということです。これは、appsettings.json が出力ディレクトリ(通常は bin\Debug\net6.0)にコピーされていないためです。

解決方法

パスbin\Debug\net6.0appsettings.jsonを配置すれば解決できます。

"42P01: リレーション"テーブル名"は存在しません"

(例)
"42P01: リレーション\"books\"は存在しません"

これは、エラーメッセージ "42P01: リレーション"books"は存在しません" は、PostgreSQL が "books" というテーブルを見つけられないことを意味しています。public."Books" といった場合、テーブル名やスキーマ名は大文字と小文字が区別されます。PostgreSQL はデフォルトで、テーブル名やカラム名を 小文字 に変換して扱いますが、ダブルクォーテーション(" ")で囲んだ場合は、大文字小文字を区別するようになります。

そのため、"Books" は大文字小文字を区別して検索されますが、books と小文字で書くと見つからないという問題です。

解決方法

"Books" テーブルを正しく参照するために、次のようにクエリを変更する必要があります。

Program.cs
string sql = "SELECT * FROM public.\"Books\";";

参考サイト

0
0
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?