如何在(App.config)连接字符串中使用应用程序数据

5

我在项目中有一个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=&quot;Data Source=|ApplicationData|\Entities.sdf&quot;" providerName="System.Data.EntityClient"/>
  </connectionStrings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
</configuration>

迄今为止我了解到:%APPDATA% 是不被支持的,使用设置类(如建议的那样)也行不通(因为在异常被抛出的时候设置类还没有构造好)。

是否可以在 connectionString 属性中(在 App.Config 中)使用应用程序数据文件夹(或其他特殊文件夹)?

注意:我似乎正在寻找一个尽早修改连接字符串(在代码中)的解决方案,而不是本地的 App.Config 解决方案。

1个回答

12

使用您自定义构建环境变量支持:

假设您有:

<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
只是补充一下 - 这篇博客文章http://erikej.blogspot.com/2010/07/getting-started-with-sql-server-compact.html几乎涵盖了所有开始使用CE的步骤。 - Jagmag
我不知道为什么你在|%AppData%|中使用了||? - Dzung Nguyen
只是为了确保替换正确,我会打赌。 - xximjasonxx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接