C#でのSQLの書き方

C#, IT

C#でSQLを書く際の記述方法をまとめます。


駄目な例

string sql =
      "SELECT HOGE1 " +
      "FROM HOGE_TABLE " +
      "WHERE HOGE1 = :hoge ";

駄目な例としてよく挙がっている書き方です。
+での連結は連結する文字列の数が多いとパフォーマンスが下がるらしいです。
逆に言えば上記の例みたいに数回連結する程度なら+連結は有用です。
ただ、古いプロジェクトならともかく、
最近のプロジェクトで上記の書き方はあんまり見ない気がします。
ですので使わないほうが無難かもしれません。

StringBuilder sb = new StringBuilder();
            sb.Append("SELECT HOGE1 ");
            sb.Append("FROM HOGE_TABLE ");
            sb.Append("WHERE HOGE1 = :hoge ");

よく見かける書き方がこれです。
僕がよくやらかすのが半角スペースの入れ忘れです。
SQLの一行目の文末にスペースが入っていますが、
このスペースがないとHOGE1とFROMがつながってしまいエラーが発生します。
こんな単純なことでけっこう時間を奪われることが多いので、
あんまり好きじゃない書き方です。


良さげな記述方法

StringBuilder sb = new StringBuilder();
            sb.AppendLine("SELECT HOGE1 ");
            sb.AppendLine("FROM HOGE_TABLE ");
            sb.AppendLine("WHERE HOGE1 = :hoge ");

駄目な例のAppendをAppendLineにしただけです。
Appendと違い、AppendLineは改行してくれるので、
一行目の文末にスペースを入れなくてもエラーになりません。
ログなども改行してくれるので見やすいです。

string sql =
    @"SELECT HOGE1 
     FROM HOGE_TABLE 
      WHERE HOGE1 = :hoge ";

逐語的文字列リテラルで書く方法です。
一緒に作業している後輩がめっちゃ勧めてきました。
ただif文とかで条件分岐する際には
結局StringBuilder.AppendLineを使っていたので僕としては好きじゃないです。
ログに一行で出てしまう欠点もあります。


結論

StringBuilder.AppendLineを使うのが良いような気がします。

C#, IT

Posted by raishin