2013年6月13日木曜日

(C#, VB.NET)Debug モードと Release モードで接続文字列を変える

アプリケーション構成ファイル(~.exe.config)はユーザースコープの設定は変更可能ですが、アプリケーションスコープの設定は読み取り専用で変更できません。接続文字列はこのアプリケーションスコープになります。

これを、アプリケーション構成クラスのパーシャルクラスを作成して変更している方がいました。そちらの記事は C# なので、こちらでは VB.NET に置き換えて紹介します。

■VB.NET
Namespace My

    ''' <summary>
    ''' アプリケーション構成クラスのパーシャルクラス(接続文字列変更用)
    ''' </summary>
    Partial Friend NotInheritable Class MySettings

        ''' <summary>
        ''' 接続文字列を設定します
        ''' </summary>
        ''' <param name="connectionString" />接続文字列
        Friend Sub SetConnectionString(ByVal connectionString As String)

            Me("プロジェクト名ConnectionString") = connectionString

        End Sub

    End Class

End Namespace

あとはエントリポイントなどで #If ディレクティブを利用して作成したメソッドをコールすれば Debug モードの時だけ接続文字列が変わります。

以下は SQL Server 接続文字列でのサンプルです。
#If DEBUG Then
    ' debug モードの時のみ接続文字列を書き換え
    My.Settings.SetConnectionString("Data Source=DBサーバー名;Initial Catalog=データベース名;User ID=ユーザーID;Password=パスワード")
#End If

そもそも、接続文字列をアプリケーション構成で持たなければ良い話ですが、設定ファイルで持ってるとメンテが楽なんですよね。

既に稼働しているプロジェクトで TableAdapter を多用している場合でも、大元の接続文字列を動的に変更できれば変更箇所はそこだけで済み安全で楽ですね。

C# でのパーシャルクラスは参考リンクのページを参照してください。

--追記
上記の方法でも実現は可能ですが、構成ファイルを切り替える方法が一般的な様です。上記はアプリケーション構成クラスをいじる時の参考にしてください。

■環境
OS:Microsoft Windows XP Home Edition 日本語 Service Pack 3
IDE:Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1
Framework:Microsoft .NET Framework Version 2.0 SP2

■参考リンク
TableAdapterの接続文字列を動的に変更