0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#でpostgreSQLへ接続してみる

Posted at

目次

  1. 検証環境
  2. DBのデータ作成
  3. C#の開発環境を作る(環境変数とVScodeの設定)
  4. C#のファイルを実行してデータを取得する
  5. Webページに表示する準備をする
  6. DBにデータ追加し、Webページの表示が変わるか確認する

やりたいこと

  • C#からDBのデータを参照する方法を試す
  • C#で取得したデータをWebAppとして表示させる
  • C#の構築をchatGPT-4 に聞きながら環境調整して実施
    (ChatGPTの活用方法の検討)

検証環境

  • OS:Window11
  • ミドルウェア: .Net 9.0.1
  • DateBase:PostgreSQL ver. 15.8
  • DB GUI:pgAdmin ver. 8.114
  • CodeEditer:VScode

各ツールを公式サイトからダウンロード

pgAdminはpostgreSQLダウンロード時にはダウンロードしないこと。
pgAdminのアップデートする際、別フォルダ扱いされるため、うまくアップデートできなくなります。

DBに検証データを作成する

pgAdminを開き、任意のスキーマにテーブルを作成し、テストデータを入れていく

Tableの作成

CREATE TABLE test_table (
daytime timestamp
,test_no integer
,test_name varchar
,value integer
,comment varchar
,PRIMARY KEY(daytime, test_no)
);

作成したTableができたことを確認する

select * from public.test_table;

※任意のスキーマに変えている場合、publicは設定したスキーマ名にする必要があります。

データの登録

作成したTableにデータを登録する

INSERT INTO test_table 
(daytime ,test_no ,test_name ,value ,comment )
VALUES
('2025-01-01 12:00:00', 10, 'C#connection010', 100, 'test010')
,('2025-01-01 13:00:00', 15, 'C#connection015', 110, 'test015')
;

Tableにデータができたことを確認する

select * from public.test_table;

任意のスキーマに変えている場合はpublicをスキーマ名にしてください。
データが入っていれば、OK

C#の開発環境の設定

Pathの設定

DBに接続するため、環境変数を設定する
windowsの検索窓から「環境変数を編集」と検索
Pathという項目を編集する
Pathの中にPostgreSQLのbin, lib, includeのフォルダを設定追加する

  • %\Program Files\PostgreSQL\[バージョン番号]\bin
  • %\Program Files\PostgreSQL\[バージョン番号]\lib
  • %\Program Files\PostgreSQL\[バージョン番号]\include
    ※上記、設定後、PCの再起動が必要

VScodeの設定

VScodeのterminal(powershell)からecho $env:PATHを実行し、設定したPath情報が入っているか確認する

確認出来たら、次のコマンドで、.Netフォルダを作成する。

dotnet new console -n [任意で設定するフォルダ名]
cd [任意で設定したフォルダ名]

任意で設定したフォルダにNpgsqlをビルドする

dotnet add package Npgsql

作成されたプログラムを次のように変更


using System;
using Npgsql;
using System.Text;

class Program
{
  static void Main()
  {
    string connString = "Host=localhost;Username=[作成したユーザー名];Password=:[作成したユーザーのパスワード];Database=[自分で作ったDB名]";

    try
    {
      using (var conn = new NpgsqlConnection(connString))
      {
        conn.Open();
        Console.WriteLine("Connected to PostgreSQL!");

        using (var cmd = new NpgsqlCommand("SELECT daytime, test_no, test_name, value, comment FROM test_table", conn))
        using (var reader = cmd.ExecuteReader())
        {
          while (reader.Read())
          {
            Console.WriteLine($"test_no: {reader["test_no"]}, test_name: {reader["test_name"]}, all:{reader["daytime"]}");
            Console.WriteLine(cmd);
          }
        }
      }
    }
    catch (Exception ex)
    {
      // エラーが起きたときに原因がわかるようにする
      Console.WriteLine($"Error: {ex.Message}");
    }
  }
}

terminalなどに登録したデータが表示されていればOK

解説

Main()で定義している処理について

  1. 接続先の設定
    次の処理で接続先を設定している
    string connString = "Host=localhost;Username=testUser;Password=drum3284;Database=testDb";

  2. 操作コマンド用 変数カーソルの設定
    var conn = new NpgsqlConnection(connString)
    SQL処理の管理(トランザクション開始と終了)となるための宣言をできるように関数を作成している。

  3. SQLの実行
    var cmd = new NpgsqlCommand("SELECT daytime, test_no, test_name, value, comment FROM test_table", conn)
    SQLの実行コマンドを設定し、処理用のカーソルで呼び出している

  4. 実行結果の格納
    3の結果を次の変数に格納する
    var reader = cmd.ExecuteReader()

  5. . 実行結果をterminalに表示させる
    Console.WriteLine($"test_no: {reader["test_no"]}, test_name: {reader["test_name"]}, all:{reader["daytime"]}");
    3,4から実行した結果のどの項目を表示させるか設定し、表示させている。

まとめ

C#でDBのデータを取得する方法まではできた。
また、C#で配列に格納し、表示させる方法まで理解できた。

格納まではいいが、このままだとレコード数が増えると使うには処理時間がかかり厳しくなりそうなため、なにかしらSQLの文精査などが必要になりそう。

配列からカラムごとにデータを取り出せるので、ほしい項目だけの活用などまでには環境構築踏まえできるようになった。

0
2
0

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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?