いつもこいつを書くときに考えることがある。
どうやってプログラムに記述するとミスが減るのだろう。
どうやったら項目名にダブルコーテーションを読みやすい形でつけることが出来て、
どうやったら文字列のデータにシングルコーテーションを見やすく文字列連結出来て、
どうやったら同じような構文の中で数値型のデータを扱えるのだろうと。


例えば通常出てくるようなこんなソース。
サンプルソースであれば連番変数も使おうというもの。

string strSQL = ""
strSQL += "select ";
strSQL += " \"項目名01\", ";
strSQL += " \"項目名02\", ";
strSQL += " \"項目名03\" ";
strSQL += "from ";
strSQL += " \"テーブル名\" ";
strSQL += "where ";
strSQL += " \"キー項目01\" = '" + strKey01 + "' and" ;
strSQL += " \"キー項目02\" = '" + strKey02 + "' and" ;
strSQL += " \"シーケンスナンバー\" >= " + intNo.ToString() + " and" ;
strSQL += " \"作成日\" >= '" + strStartDate + "' and" ;
strSQL += " \"作成日\" <= '" + strEndDate + "' and" ;

常日頃から『\"』は読みづらさの元だと思っている。
しかして、DBの項目名によっては無いと構文エラーになるようなものもある。
SQL文中において、ついてないよりはついていたほうがよい類のものである。
ゆえに悩ましい。


文字列編集のために費やされる時間は、
1回あたりのSQL文実行時間よりは少ない。
かつ、実行速度的にも無視できそうな時間であることを踏まえて。
実装内容はともかくSQL編集用のクラスを用意してみることを考えてみた。

SqlEditer sql = new SqlEditer();
sql.SetSelect( "項目名01" );
sql.AddSelect( "項目名02" );
sql.AddSelect( "項目名03" );
sql.SetFrom( "テーブル名" );
sql.SetWhere( "キー項目01", "=", strKey01 );
sql.WhereAnd( "キー項目02", "=", strKey02 );
sql.WhereAnd( "シーケンスナンバー", ">=", intNo );
sql.WhereAnd( "作成日", ">=", strStartDate );
sql.WhereAnd( "作成日", "<=", strEndDate );
string strSQL = sql.GetSql();

メソッド名はともかくとして、
見やすくなったかな。(;・∀・)


通常のSQL文に似せることで、理解の促進を狙いつつ、
構文の設定ミスを減らす。
この目的が達成できればSQL編集用クラスとしては申し分なくなるハズ。
ついでにUpdateもInsertもDeleteも同じようにできたら万々歳。
ってか、それまで出来なきゃ編集用クラスとしての意味が無い気がしてきた。
Where句にしても、「比較対照のデータが無い場合は条件文からはずす」っといった
用件はフツーにありそうだし、対応する必要がある。
また「このデータがカラッポの時」という用件もまたしかりである。
悩ましい。


SQL文中のカンマ編集だの、Where句の構文設定内容へのもうちょっとした考慮は必要になるけれども、
実現できたら今よりも設定作業が楽になると思えれば一度はやってみたくなるのが技術者というもの。
ちょいと考えよう。


ってか世の中にそんなものはすでにあったりするのかしらん。
あったら検証して使えたら使うっ
使えなかったらとか使いにくかったら自分で作るっ(゜∀゜)♪