2010-11-22 42 views
5

Tôi đã có cơ sở dữ liệu SQL Server CE trong một dự án mà tôi không thể lưu trữ ở đâu đó trong thư mục% AppData%. Tuy nhiên tôi không thể tìm thấy một cách để làm cho một tham chiếu đến con đường Application Data trong chuỗi kết nối (trong App.Config)Cách sử dụng Dữ liệu ứng dụng trong một (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> 

Cho đến nay tôi đã học được rằng:% APPDATA% không được hỗ trợ và sử dụng lớp cài đặt (như được đề xuất) sẽ không hoạt động (lớp cài đặt không được xây dựng tại thời điểm ngoại lệ đã được ném).

Có thể sử dụng thư mục dữ liệu ứng dụng (hoặc một thư mục đặc biệt khác) trong thuộc tính connectionString (trong App.Config) không?

Lưu ý: có vẻ như tôi đang tìm kiếm giải pháp để sửa đổi chuỗi kết nối (trong mã) càng sớm càng tốt thay vì giải pháp App.Config gốc.

Trả lời

12

Sử dụng tùy chỉnh của bạn xây dựng hỗ trợ biến môi trường:

Cho phép bạn có:

<connectionStrings> 
    <add name="My" connectionString="..;Data Source=|%AppData%|\Entities.sdf;.." /> 
</connectionStrings> 

Các bạn có thể sử dụng:

using System.Configuration; // requires reference to System.Configuration.dll 

ConfigurationManager.ConnectionStrings["EntityConnectionString"].ConnectionString.Replace("%AppData%", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

cách Tiếp theo, bạn có thể hỗ trợ một số biến môi trường:

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 Chỉ để thêm - bài đăng trên blog này http://erikej.blogspot.com/2010/07/getting-started-with-sql-server-compact.html nhiều lượt đi qua tất cả các bước để bắt đầu với CE – InSane

+0

một bài viết hay, cảm ơn ! –

+0

Tôi không biết tại sao bạn đặt || trong |% AppData% | ? – nXqd

Các vấn đề liên quan