【T2d】Npgsqlを用いたデータベースへのアクセス(4/6)
プロジェクトタイプ | C#コンソールアプリ※ |
---|---|
プロジェクト名 | T2d |
ソリューション名 | PIT2 |
ターゲットフレームワーク | .NET 8.0(長期的なサポート) |
最上位レベルのステートメントを使用しない | 使用する(チェックオフ) |
※ 「コンソールアプリ(.NET Framework)」ではないので注意せよ!
注意
- 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
- 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
- プロジェクトの作成作業についてはプロジェクトの作成とライブラリのインストールを参照せよ.
2d-4. Npgsqlを用いたPostgreSQLの操作の基礎
では実際にNpgsqlを用いて従業員データベースの従業員テーブルから,全従業員の情報を取り出してみよう. このために,今回は_に示すSQL文を使用する.
|
|
【★】解説するまでもないかもしれないが,これは従業員テーブル(tbl_jugyoin
)の全従業員の従業員番号(jugyoin_no
),
姓(sei
),名(mei
)を,従業員番号宇の昇順で取得するSQL文である.
まずは単純にpgAdminで_のSQL文を実行してみよう.pgAdmin上で「PostgreSQL 16」→「Databases」→
「SampleDB_hr」を右クリックし,「Query Tool」を起動して_を実行してみよう.結果は
_のようになるはずである.
このSQL文を実行したクエリツールは後で参照するので閉じないようにしておこう.
次に _のSQL文をC#のプログラムから実行する方法を試してみよう このためには自分の作成したプログラムで先ほどインストールしたライブラリ
Npgsqlを利用する必要がある.Npgsqlに含まれているクラスはNpgsql
名前空間に含まれているので,
これらを使用するコードの冒頭に_のようなusingディレクティブを追記する必要がある.
|
|
Program.csに上記のusingディレクティブを追記したら,さらに_に示す内容を記述する.
|
|
書けたら実行してみよう.実行結果は_のようになる.
jugyoin_no = 100, sei = 孫, mei = 正義 jugyoin_no = 101, sei = 荒木, mei = 飛呂彦 jugyoin_no = 106, sei = 小沢, mei = 一郎 jugyoin_no = 107, sei = 東藤, mei = 大輝 jugyoin_no = 108, sei = 宮沢, mei = 賢治 jugyoin_no = 109, sei = 御坂, mei = 美琴 jugyoin_no = 113, sei = 安倍, mei = 晋三 jugyoin_no = 123, sei = 高橋, mei = 凜 jugyoin_no = 124, sei = 滝野, mei = 智 jugyoin_no = 143, sei = 浜田, mei = 雅功 jugyoin_no = 144, sei = 毛受, mei = 綾乃 jugyoin_no = 146, sei = 鳩山, mei = 一郎 jugyoin_no = 149, sei = 渡辺, mei = 達也 jugyoin_no = 177, sei = 斉藤, mei = 豊 jugyoin_no = 178, sei = 太宰, mei = 治 jugyoin_no = 179, sei = 阿万音, mei = 鈴羽 jugyoin_no = 200, sei = 中村, mei = 一郎 jugyoin_no = 201, sei = 岡部, mei = 倫太郎 jugyoin_no = 202, sei = 白井, mei = 黒子 jugyoin_no = 203, sei = 宮迫, mei = 博之 jugyoin_no = 204, sei = 池田, mei = 功 jugyoin_no = 205, sei = 橋田, mei = 至 jugyoin_no = 206, sei = 福沢, mei = 諭吉
_の①~⑤で何をしているのかを説明しておこう.
①は接続文字列(connection string)と呼ばれるもので,接続先や認証情報などを含んだ文字列である.
これは接続先のデータベースを示すための電話番号のようなものだと考えると分かりやすいだろう.
接続文字列はNpgsqlに限らずADO.NET系のデータベースドライバーでよく使われるフォーマットで,
の
組をセミコロン(設定名
=設定値
;
)でつなげたものとなっている.各設定名/値の出現順序は規定されない.①の接続文字列は
_に示す情報を含んでいる.単純なフォーマットなので必要に応じて自分でこの接続文字列を構築できるようにしておこう.
この接続文字列で使用できる設定名/値の詳細についてはConnection String Parameters - Npgsql Documentationを参照するとよいだろう.
設定名 | 設定値 | 備考 |
---|---|---|
Host | localhost | 接続先のマシンを表す文字列.localhost は自分自身を表す. |
Port | 5432 | 接続先のポート番号.PostgreSQLはデフォルトではポート5432で接続を待ち受けている. |
Database | SampleDB_hr | 接続して使用するデータベース名. |
Username | hr_user | 認証に使用するユーザー名.リスト2d-2-1で設定したものを指定している. |
Password | n1z3Lo9AQap3 | 認証に使用するパスワード.リスト2d-2-1で設定したものを指定している. |
②では「データベースへの接続」そのものを表すクラスNpgsqlConnection
の変数を作成している.
このクラスのインスタンスを作成するには,①のような接続文字列をコンストラクタに渡す必要がある1.
このクラスのインスタンスメソッド.Open()
を呼び出すと,実際に接続が開始される.
③ではSQL文(コマンド)を表すクラスNpgsqlCommand
の変数を作成している.このクラスのインスタンスを作成するには,
SQL文を表す文字列と②のインスタンスをコンストラクタに渡す必要がある2.
今回は_のSQL文を変数sqlStatement
にいったん入れてから,NpgsqlCommand
クラスのコンストラクタに渡している.
ちなみに@で始まる文字列(「@"なんとかかんとか"
」のような文字列)は,逐語的文字列リテラルといい,文字列の中に改行なども含めることができる文字列リテラルである.
④では,NpgsqlCommand
クラスのインスタンスメソッドであるExecuteReader()メソッドを呼び出している.これは③で指定したSQL文がSELECT文のような,実行結果として表を返すSQL文である場合に
使用するメソッドである.INSERT文,DELETE文やUPDATE文の場合にはExecuteNonQuery()メソッドを使用する.
ExecuteReader()
メソッドは戻り値として,NpgsqlDataReaderクラスの
インスタンスを返す.④ではこの戻り値をreader
という変数に保存している.このクラスはSQL文の実行結果の表を読み取るための
クラスである.
⑤のwhile
文がその実行結果の表の読み取り処理である.このwhile
文は実行結果の表の行ごとに繰り返される.つまり
実行結果の行数と同じだけ繰り返される.繰り返し処理の中では.GetInt32()
や.GetString()
といったメソッドを呼び出して
その行に含まれる列の値を取得している.これらのメソッドには引数として整数を渡す必要があるが,
この整数はSELECT文における列番号である(_).
今回は③のSELECT文で,従業員番号(0番目),姓(1番目),名(2番目)を取得しているので,
取得した行の0番目の列を整数型で取得するために.GetInt32()
メソッドを使用し,
1番目と2番目の列を文字列で取得するために.GetString()
メソッドを使用している.
このように,正しく行の情報を読み取るにはSELECT文の実行結果の表の列数と,その列の型を正しく把握しておく必要がある.