如何在(App.config)connectionString 中使用应用程序数据
Posted
技术标签:
【中文标题】如何在(App.config)connectionString 中使用应用程序数据【英文标题】:How to use Application Data in an (App.config) connectionString 【发布时间】:2011-05-13 17:23:56 【问题描述】:我的项目中有一个 SQL Server CE 数据库,我不想将其存储在 %AppData% 目录中的某个位置。但是我找不到在连接字符串(在 App.Config 中)中引用应用程序数据路径的方法
<?xml version="1.0"?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="EntityConnectionString" connectionString="metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlServerCe.3.5;provider connection string="Data Source=|ApplicationData|\Entities.sdf"" providerName="System.Data.EntityClient"/>
</connectionStrings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
</configuration>
到目前为止,我了解到:不支持 %APPDATA% 并且使用设置类(如建议的那样)也不起作用(设置类在已引发异常时未构造)。
是否可以在 connectionString 属性(在 App.Config 中)中使用应用程序数据文件夹(或其他特殊文件夹)?
注意:我似乎正在寻找一种解决方案来尽早修改连接字符串(在代码中),而不是原生 App.Config 解决方案。
【问题讨论】:
【参考方案1】:使用您的自定义构建环境变量支持:
让你拥有:
<connectionStrings>
<add name="My" connectionString="..;Data Source=|%AppData%|\Entities.sdf;.." />
</connectionStrings>
你可以使用的:
using System.Configuration; // requires reference to System.Configuration.dll
ConfigurationManager.ConnectionStrings["EntityConnectionString"].ConnectionString.Replace("%AppData%", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
下一个可以支持多个环境变量的方法:
var vars = new Dictionary<string, string>
"%AppData%", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"%Temp%", Environment.GetFolderPath(SpecialFolder.Temp) ,
// etc..
"%YourNonStandardVar", "YourNonStandartPath"
;
var result = ConfigurationManager.ConnectionStrings["YourString"].ConnectionString
foreach (var v in vars)
result = result.Replace(v.Key, v.Value);
【讨论】:
+1 补充一下 - 这篇博文 erikej.blogspot.com/2010/07/… 几乎介绍了开始使用 CE 的所有步骤 不知道你为什么放||在 |%AppData%| ? 只是为了确定替换我会打赌以上是关于如何在(App.config)connectionString 中使用应用程序数据的主要内容,如果未能解决你的问题,请参考以下文章