0

我有一个使用数据访问层的 n 层应用程序。在数据访问层项目设置中,有一个连接字符串。该字符串包含文本“Data Source=|%LOCALAPPDATA%|\Some Folder\File.ext”,但是当应用程序运行(并且文件在那里)时,我收到OleDbException“不是有效文件”。

我是写错了字符串,还是由于其他问题?

另外,如果用户有 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);

通过这种方式,您的应用程序将更加灵活,并将轻松适应您的客户无疑会提出的不同外部约束。
(当然,您的安装程序应该选择或配置您对数据库文件具有完全读/写权限的目录)

为了完整性

数据目录在哪里

于 2013-05-29T17:18:21.350 回答