【问题标题】:How can I add %LOCALAPPDATA% to a connection string setting?如何将 %LOCALAPPDATA% 添加到连接字符串设置?
【发布时间】:2013-05-29 17:03:17
【问题描述】:

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

是我写错了字符串,还是因为其他问题?

另外,如果用户有 Windows XP,这个目录会指向任何东西吗?我正在制作安装程序,将 Access 数据库安装到这个特定文件夹,但我认为 XP 没有“LocalAppData”,而只有“AppData”。

【问题讨论】:

  • 奇怪这两个管道,确定不是|DataDirectory|?
  • 哦,我确定。我尝试将 access 数据库安装到 |DataDirectory|但是当应用程序安装时,它默认没有修改文件的权限,我收到一个权限错误。我读到这是 AppData 目录更适合使用的地方,所以我现在让安装程序将数据库移动到该目录并需要对其进行测试。

标签: .net database-connection connection-string special-folders


【解决方案1】:

您可以使用此代码获取并替换预定义的环境变量

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);

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

为了完整性

Where is DataDirectory

【讨论】:

  • 看起来不错,但 ConfigurationManager 位于哪里?顺便说一下,这是一个桌面应用程序。
  • 没关系,将 ref 添加到 System.Configuration 并且现在可以访问它。谢谢。
  • 使用 System.Configuration(并添加对 System.Configuration.dll 的引用)参见msdn.microsoft.com/en-us/library/ms134260.aspx
  • 什么是行“string myDBPath = ConfigurationManager.AppSettings["PathToDatabase"].ToString();”需要什么?此外,当我添加这一行并在代码中命中时,我的其余代码将被跳过并加载应用程序。
  • 只是一个关于如何从外部配置文件中检索数据库路径的示例。实际上,配置文件已经有自己的部分来存储连接字符串,但是从您的代码中不清楚您是否在程序中有硬编码字符串或者您是否已经使用了配置文件
猜你喜欢
  • 2017-02-18
  • 2016-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2019-01-07
相关资源
最近更新 更多