- 締切済み
DB接続文字列の一般的プログラミング方法について
DB接続プログラムで Dim connectionString As String Dim Cn As New SqlConnection Dim cmd As SqlCommand Dim ServerName As String = "(local)" 'サーバー名(またはIPアドレス) Dim UserID As String = "sa" 'ユーザーID Dim Password As String = "" 'パスワード Dim DatabaseName As String = "ogawaDB" 'データベース connectionString = "Server=" & ServerName & ";" connectionString &= "User ID=" & UserID & ";" connectionString &= "Password=" & Password & ";" connectionString &= "Initial Catalog=" & DatabaseName Cn.ConnectionString = connectionString cmd = Cn.CreateCommand cmd.CommandText = "SELECT id FROM table1" Cn.Open() Debug.Print(cmd.ExecuteScalar) Cn.Close() cmd.Dispose() Cn.Dispose() のデータベース接続プログラムで connectionStringにデータベース接続情報を書くと思うのですが これを各プログラム毎に記述していたのでは変更が生じた場合 管理が大変だと思うのですがこの記述情報をファイルから読みっとったり して対応するのでしょうか。 一般的の接続文字列の管理方法(プログラミング方法)を 教えてください
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- MARU4812
- ベストアンサー率43% (196/452)
言語は関係ない問題ですね。 > javaの場合は外部ファイルに記述していたので それはどういう目的があったからですか? それで問題なかったのですか? これからも問題は起こりませんか? それが必ず正しい方法ですか? それらを考えるのが設計であり、必要があれば 仕様として盛り込みます。 その結果が外部ファイルなら外部ファイルに 保存しますし、レジストリならレジストリに 保存します。 まぁ、それらの要求が一切ない場合は、私は 暗号化してプログラムに埋め込みでしょうか。 修正は想定しません。 (過去、何度かIniファイルに書き出すという 旧体制の方式をお客さんから要求されて実装 してきましたが、接続文字列が変わることは 皆無です。※変わるような改造では他にも 改造する必要があり、結局総入替えです。) 一般に公開しないプログラムなら暗号化 しない場合もあります。 お客さんが直接編集する要望がある場合も 暗号化できません。 専用のパスワード変更管理プログラムを作る 予算は出ません。 リスクを説明してそれでもお客さんが望む ならセキュリティが甘かろうがそのように 作る場合が多いです。 > connectionStringにデータベース接続情報を書くと思うのですが > これを各プログラム毎に記述していたのでは変更が生じた場合 データベース接続クラスを1つにまとめておけばいいのでは?
- いけだ ひろし(@ike-2000)
- ベストアンサー率53% (69/129)
私は秘密のルーチンでプログラム内に埋め込んでいました。 テスト中はユーザ毎にテストするためにiniファイルに持てる機能もありました。が、テスト中だけです。本番ではエンドユーザーさんの目に留まらないように気をつけるべきだと思います。 昨今のことですから暗号化して埋め込むのが良いのではないでしょうか。 また、@ITの記事にありましたが、デバッグトレース等に出てしまわないようにも気をつけるべきです。
Windows Form / コンソールアプリの場合は、 xxxx.exe.config という名前(exe名+".config")の XML ファイルを用意して、そこに記述するのが楽です。 ソリューションエクスプローラから「アプリケーション構成ファイル」を追加すると、プロジェクトに app.config というファイルが作られます。ビルドすると exe名 + ".config" ファイル名のファイルができます。 ソリューションエクスプローラでアプリケーションを右クリックし「設定」タブを開いて設定値を追加できます。 読み込む時は、 Dim hoge As String = My.Settings("設定値名") で取得できます。 複数プロジェクトからの参照とかは、この辺を参考にどうぞ。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38805&forum=7
- Versailles123
- ベストアンサー率21% (33/156)
各PGで読み込まれるような共通モジュールに定義すればよいのではないでしょうか? もし修正があれば、その共通モジュールを修正すればよいので。
お礼
ご回答ありがとうございます。 プログラムを共通モジュールのプログラムも変更したくないとかの場合はどうすればいいのでしょうか javaの場合は外部ファイルに記述していたのでvbでもそういったことをするのかと 思い質問させていただきました。 お忙しいところご回答ありがとうございました。