2011-08-04 92 views
4

C#中是否存在一種方法從表示ConnectionString的字符串提取文件路徑爲SqlCE.sdf文件?我想檢查文件是否在初始化時存在,如果文件已被修改,請將其備份。C# - 從連接字符串獲取文件路徑

樣品連接字符串:

strConn = "Data Source=|DataDirectory|\dbAlias.sdf"; 

回答

5

有點晚了也許,但我碰到這個問題詭計同樣的問題掙扎出來。您可以通過AppDomain.CurrentDomain.GetData("DataDirectory")找到|DataDirectory|文件夾的位置。所以,你的ConnectionString可以翻譯如下:

strConn .Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString()) 
6

您可以使用SqlCeConnectionStringBuilder類來解析現有的SQL緊湊的連接字符串。

+2

這將是很好的向他解釋什麼屬性包含他正在尋找的DataDirectory目錄。 – Nix

+0

SqlCeConnectionStringBuilder.DataSource再次給出「| DataDirectory | \\ dbPerson.sdf」,而不是物理路徑。 –

+0

@Nix:AppDomain.CurrentDomain.SetData(「DataDirectory」,path); –

5

你可以只建立連接,並從它那裏得到的數據源作爲一個屬性:

string data; 
using (var conn = new SqlConnection(connectionString)) { 
    data = conn.DataSource; 
} 
+0

+1因爲您給他定義目錄的屬性。 – Nix

+0

我仍然需要查找| DataDirectory |別名。目前我知道它,但如何其他別名 - 如果任何 - 絕對路徑會很好.... –

+0

是否有任何其他別名像| DataDirectory | ? –

0

有關的LocalDB和的SqlConnection(不符合CE):

public static string GetFilePathFromConnectionString(string connectionString) 
{ 
    var attachDbFileName = new SqlConnectionStringBuilder(connectionString).AttachDBFilename; 
    return attachDbFileName.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString()); 
} 
相關問題