あんまりないと思いますが、コンソールアプリからデータベースに接続する方法について記載しておきます。
今回は、外部ファイル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の接続情報を保存します。
{
"ConnectionStrings": {
"PostgreSQL": "Host=localhost;Username=your_username;Password=your_password;Database=your_database"
}
}
全体のソースコードは、下記です。
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.0
にappsettings.json
を配置すれば解決できます。
"42P01: リレーション"テーブル名"は存在しません"
(例)
"42P01: リレーション\"books\"は存在しません"
これは、エラーメッセージ "42P01: リレーション"books"は存在しません" は、PostgreSQL が "books" というテーブルを見つけられないことを意味しています。public."Books" といった場合、テーブル名やスキーマ名は大文字と小文字が区別されます。PostgreSQL はデフォルトで、テーブル名やカラム名を 小文字 に変換して扱いますが、ダブルクォーテーション(" ")で囲んだ場合は、大文字小文字を区別するようになります。
そのため、"Books" は大文字小文字を区別して検索されますが、books と小文字で書くと見つからないという問題です。
解決方法
"Books" テーブルを正しく参照するために、次のようにクエリを変更する必要があります。
string sql = "SELECT * FROM public.\"Books\";";
参考サイト