多くの友人は、.net プログラム内の ACCESS データベースの相対パスの問題に悩まされており、プログラムを移動するたびに web.config を変更する必要があります。
データベース接続文字列内のデータベース パス。
多くの人は web.config に次のように記述します。
<アプリ設定>
<add key="OLEDBCONNECTIONSTRING" value="Provider=Microsoft.Jet.OLEDB.4.0;データ
ソース=E:webApp_DataData.mdb)"></add>
</アプリ設定>
プログラムは次のように書かれます。
MyConn = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings["OLEDBCONNECTIONSTRING"]);//注: VS2005 と VS2003 では、ConfigurationSettings の記述が異なります。
この方法で、プログラムの実行時に次のようなエラーが発生すること
を確認してください。多くの場合、次のようなプロンプトが表示されます。
「C:WINDOWSsystem32~App_DataData.mdb」は有効なパスではありません。 パス名の綴りが正しいかどうか、またファイルが保存されているサーバーに接続しているかどうかを確認してください。データソース=~App_DataData.mdb
絶対パスが正しくても、プログラムを移植する際にはweb.configを修正する必要があるので、さらに面倒です。
web.config で ASP のように Server.MapPath を使用してデータベース パスを取得する方法もありますが、web.config は Server.MapPath を認識しないため、この方法は機能しません。
その後、他のプログラムの調査と参照を通じて、ACCESS データベース パスを変更せずにプログラム パスを簡単に移植できる次の方法を結論付けました。
web.configに書いたのは以下の通りです:
<appSettings>
<add key="SQLConnString" value="provider=microsoft.jet.oldb.4.0;データ ソース="/>
<add key="dbPath" value="~/App_Data/mydata.mdb"/>
</アプリ設定>
プログラム内のデータアクセスクラスで、「SQLConnString」と「dbPath」を取り出し、それらを文字列「CONN_STRING_NON_DTC」に接続しました。
public static readonly string CONN_STRING_NON_DTC = System.Configuration.ConfigurationManager.AppSettings["SQLConnString"].ToString() + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["dbPath"]) + ";";
これは VS2005 での書き込み方法であり、使いやすいように CONN_STRING_NON_DTC を静的読み取り専用として定義しました。
まあ、この方法なら、データベースのパスを気にすることなく、プログラムを自由に移植できます^_^、私のような怠け者には最適です!