Asp.net が Access データベースに接続するときは、通常、データベース接続文字列を web.config 構成ファイルに書き込みます。接続文字列のデータベース パスは絶対パスの形式でしか表現できません。プログラムを移動する場合は、web.config でデータベース接続文字列のデータベース パスを変更する必要があり、非常に面倒です。 ~/database/test.mdb のような相対パス形式で記述した場合も誤りです。例:
<connectionstrings> <add name="Access" connectionstring="Provider=Microsoft.Jet.OLEDB.4.0;data source=~/database/test.mdb" providername="System.Data.OleDb" /> </connectionstrings>
上記は間違って書かれています。
現在、一般的な解決策は 2 つあります。
1. DataDirectory キーワード メソッドを使用する
Asp.net 2.0 以降では、Access、SQL Server Express を格納するために使用できる App_Data ディレクトリが存在します。 、XML などのデータ ファイル。 Access データベース ファイルを App_Data フォルダーに配置し、キーワード DataDirectoty を使用してパスを取得します。
<connectionstrings> <add name="Access" connectionstring="Provider=Microsoft.Jet.OLEDB.4.0;data source=|DataDirectory|test.mdb" providername="System.Data.OleDb" /> </connectionstrings>
2. web.config ファイルに 2 つの文字列を設定します
web.config ファイルに 2 つの文字列を設定します。1 つはドライバー文字列で、もう 1 つは Access データベース ファイルの相対パスです。使用する場合は、Server.MapPath()を使用して絶対パスを取得し、結合した接続文字列を使用できます。
<connectionStrings> <add name="Access" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;data source={0}" providerName="System.Data.OleDb" /> </connectionStrings> <appSettings> <add key="AccessPath" value="~/Database/test.mdb"/> </appSettings>
バックグラウンドで使用する場合、コードは次のとおりです:
private string GetConnStr() { string connStr = WebConfigurationManager.ConnectionStrings["Access"].ConnectionString; connStr = connStr.Replace("{0}", Server.MapPath(WebConfigurationManager.AppSettings["AccessPath"].ToString())); return connStr; }