0

データ アクセス レイヤーを使用する n 層アプリケーションがあります。データ アクセス レイヤーのプロジェクト設定には、接続文字列があります。文字列には"Data Source=|%LOCALAPPDATA%|\Some Folder\File.ext"というテキストが含まれていますが、アプリケーションを実行すると (そしてファイルがそこにあると)、OleDbException "Not a valid File." が発生します。

文字列を間違って書いていますか、それとも他の問題が原因ですか?

また、ユーザーが Windows XP を使用している場合、このディレクトリは何かを指しますか? インストーラーを作成し、Access データベースをこの特定のフォルダーにインストールしますが、XP には「LocalAppData」はなく、「AppData」しかないと思います。

4

1 に答える 1

3

定義済みの環境変数を取得して、このコードで置き換えることができます

string str = Environment.ExpandEnvironmentVariables("%LOCALAPPDATA%");
string expandedConString = "Data Source=|%LOCALAPPDATA%|\Some Folder\File.ext".Replace("|%LOCALAPPDATA%|", str);

ちなみに、%LOCALAPPDATA%環境変数は同じ値を指しています

string str = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

しかし、この機械は少し不器用だと思います。より良いアプローチは、|DataDirectory|置換文字列を使用することです。接続文字列を標準で記述します

"Data Source=|DataDirectory|\Some Folder\File.ext"

次に、アプリで、データアクセスコードの前に|DataDirectory|、構成設定を読み取り、その値を変更するために現在の値を変更します

string myDBPath = ConfigurationManager.AppSettings["PathToDatabase"].ToString();
AppDomain.CurrentDomain.SetData("DataDirectory", myDBPath);

このようにして、アプリケーションはより柔軟になり、顧客が間違いなく課すさまざまな外部制約に簡単に適応できるようになります。
(もちろん、インストーラーは、データベース ファイルに対する完全な読み取り/書き込み権限を持つディレクトリを選択または構成する必要があります)

完全を期すために

DataDirectory はどこにありますか

于 2013-05-29T17:18:21.350 に答える