【T2d】Npgsqlを用いたデータベースへのアクセス(6/6)
プロジェクトタイプ | C#コンソールアプリ※ |
---|---|
プロジェクト名 | T2d |
ソリューション名 | PIT2 |
ターゲットフレームワーク | .NET 8.0(長期的なサポート) |
最上位レベルのステートメントを使用しない | 使用する(チェックオフ) |
※ 「コンソールアプリ(.NET Framework)」ではないので注意せよ!
注意
- 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
- 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
- プロジェクトの作成作業についてはプロジェクトの作成とライブラリのインストールを参照せよ.
2d-6. SQL文の正しいパラメーター化
SQL文の一部をプログラム的に置き換えることをSQL文のパラメーター化というが, 前節では正しくない,危険なパラメーター化の方法を試した.Npgsqlで正しくSQL文のパラメタ化を行うには, プリペアードステートメントと呼ばれる機能を使用するのが一般的である. これはNpgsqlに特有の機能という訳ではなくたいていのデータベースドライバが備えている機能である.
まずNpgsqlCommand
に渡すSQL文の文字列のうち,置き換える必要がある部分をアットマーク@
で始まる文字列に変更する.
たとえば前節の例であれば_のようにする.
SELECT jugyoin_no, sei, mei FROM tbl_jugyoin WHERE jugyoin_no = @hoge
この@で始まる文字列が,そのSQL文の一部を置き換えるパラメーター名である. このパラーメーターは,SQL文のうち単一の値を示す文脈にしか使用できない. たとえば条件式の演算子をこの方法で置き換えたりすることはできない.
このhoge
というパラメーターの型を指定するには_のようにする.
ここでcmd
はNpgsqlCommand
クラスのインスタンスである.
|
|
この方法で準備したSQL文に実際の値を結び付けるには_のようにする.
|
|
ここまでの方法を実際に試してみよう. Program.cs を_のように書き換える.
|
|
書き換えたら実行してみよう.実行すると先ほどと同じく従業員番号の入力を求められるので
適当な従業員番号(例えば100
)を入力してEnterキーを押す.
実行結果は図2d-5-1のようになる.
対象の従業員番号を入力: 100 jugyoin_no = 100, sei = 孫, mei = 正義
ではもう一度実行してリスト2d-5-2の文字列を入力してみよう. 実行結果は_のようになる.
変換に失敗して例外が生じていることがわかる(Visual Studio がバックグラウンドのままの場合もあるので,起動したら Visual Studio の画面を見てみよう).
これは_の28行目の文字列から整数への変換での失敗であるが,仮にパラメーターhoge
に文字列をセットしても例外が発生するため,意図しないSQL文が
実行されるのを防ぐことができる.
ここまでの動作を確認したら四つ目のチュートリアルは完了である. 以降の作業における混乱を防ぐため,次に進む前に Visual Studio のエディタをすべて閉じておこう.Visual Studio のいずれかのエディタのタブを右クリックして 「すべてのドキュメントを閉じる」をクリックすれば,エディタをすべて閉じることができる.