[c#]コード内にSQL書くときってどうしてますの?

SQLステートメントをコード中に書く場合

string query1 = "SELECT USER_ID, USER_NAM FROM USERS WHERE INS_DATE >= ?";

みたいな感じで記述していくと、長文になればなるほど可読性が悪くなってしまう。

なので、

StringBuilder query = new StringBuilder();
query.AppendLine("SELECT ");
query.AppendLine("  USER_ID, ");
query.AppendLine("  USER_NAM ");
query.AppendLine("FROM ");
query.AppendLine("  USERS ");
query.AppendLine("WHERE ");
query.AppendLine("  INS_DATE >= ?");

という風に書く人いますけど、これもSQL修正するの大変なんだよね…
まず、SQLステートメントに問題があるかもしれないので、抜き出して動作検証するってこと考えた場合

SELECT         
  USER_ID,     
  USER_NAM     
FROM           
  USERS        
WHERE          
  INS_DATE >= ?

というSQLステートメントを抜き出したいわけで、これが大変ですぉ!

なので、こういう風に書いてもらえないでしょうか?

query.AppendLine("SELECT         ");
query.AppendLine("  USER_ID,     ");
query.AppendLine("  USER_NAM     ");
query.AppendLine("FROM           ");
query.AppendLine("  USERS        ");
query.AppendLine("WHERE          ");
query.AppendLine("  INS_DATE >= ?");

こう書いておくと、昨今のテキストエディタのボックスコピー(矩形範囲のコピー)機能でSQLステートメントが簡単に取り出せるんですよね…

しかし、無駄なスペースが入っているので、DBサーバーとの通信オーバーヘッドが気になりますな。

なので、こんな感じで拡張メソッド作るってのはどうですかねぇ

public static class Hehehe
{
    public static StringBuilder Add(this StringBuilder self, string str)
    {
        #if DEBUG
        return self.AppendLine(str);
        #else
        self.Append(str.Trim());
        return self.Append(" ");
        #endif
    }
}

で、こう書けば。

query.Add("SELECT         ");
query.Add("  USER_ID,     ");
query.Add("  USER_NAM     ");
query.Add("FROM           ");
query.Add("  USERS        ");
query.Add("WHERE          ");
query.Add("  INS_DATE >= ?");

どう?ダメ?

仕事

Posted by tkymgr