2010-11-22 10 views
5

%AppData%ディレクトリのどこかに格納することができないプロジェクトにSQL Server CEデータベースがあります。 %のAPPDATA%はサポートされており、使用されていません。しかし、私は(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> 

は、これまでのところ、私はことを学んだ(app.configをで)接続文字列でのアプリケーションのデータ・パスへの参照を作成する方法を見つけることができません設定クラス(提案されたようなもの)は動作しません(設定クラスは例外が既にスローされた時点では構築されません)。

(App.Configの)connectionStringプロパティにアプリケーションデータフォルダ(または別の特殊フォルダ)を使用することはできますか?

注:ネイティブの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ジャスト追加するには - このブログ記事http://erikej.blogspot.com/2010/07/getting-started-with-sql-server-compact.html CEを始めようとするすべての手順を少し歩く – InSane

+0

いいね、ありがとう! –

+0

私はなぜあなたが置くのか分からない|| in |%AppData%| ? – nXqd

関連する問題