2010-11-22 2 views
5

У меня есть база данных SQL Server CE в проекте, который я не буду хранить где-то в каталоге% AppData%. Однако я не могу найти способ, чтобы сделать ссылку на пути данных приложения в строке соединения (в App.Config)Как использовать данные приложения в (app.config) connectionString

<?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.

ответ

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

+1 Just Just добавить - это сообщение в блоге http://erikej.blogspot.com/2010/07/getting-started-with-sql-server-compact.html довольно много проходит через все шаги, чтобы начать работу с CE – InSane

+0

приятный, спасибо ! –

+0

Я не знаю, почему вы положили || в |% AppData% | ? – nXqd

Смежные вопросы