VB .NETでヒアドキュメント的に文字列を書く方法

木曜日 , 23, 7月 2015 Leave a comment

VBで構築された業務システムのソースコードでSQLなど長い文字列をプログラムに埋め込む際、下記のようなソースコードがよく見られます。

    Dim sql as string = "select field1," & _
          "field2," & _
          "field3" & _
          " from table1" & _
          " where field4 is not null" & _
          " and field5 = ''"
    Dim Sql As New StringBuilder()
    Sql.Append("select field1,")
    Sql.Append("field2,")
    Sql.Append("field3")
    Sql.Append(" from table1")
    Sql.Append(" where field4 is not null")
    Sql.Append(" and field5 = ''")

上記2つは、本来書きたい文字列以外にVB .NETの文法に合わせて記述しなければならない文言が多くあり、メンテナンスをするのが非常に大変です。

そこで、System.Xml.Linq.XElementを使いXMLとすると、複数行にわたる文字列が一気に記述できてとても便利です。

    Dim sql = <s><![CDATA[select field1,
          field2,
          field3
          from table1
          where field4 is not null
          and field5 = ''
        ]]></s>.Value()

この方法を使うためには、最初にプロジェクトの参照設定でSystem.Xml.Linqアセンブリを追加する必要があります。
また、XML内の空白がそのまま取り出されてしまうので、必要に応じてtrimなどをかけた方が良い場合があります。

この方法は特にSQLを記述する場面で使うと、開発中のソースコードからXMLの内側のSQLを取り出しDBの管理ツールにコピペし動作確認を行ったり、その逆ができたりするので、非常に効率的に開発を進めることができます。

最近リリースされたVisual Studio 2015ではこのあたりの改善(Visual Basic 14 における強化点トップ 14で、11番目の項目として「複数行の文字列リテラル」が挙げられています)が行われていますが、開発実業務でVS2015が使われることは当分先のことになると思われるので、まだまだXElementを使う方法が重宝しそうです。

Tags: