2011-08-04 11 views
4

ConnectionStringからSqlCE.sdfファイルを表す文字列からファイルパスを抽出する既存の方法がC#に​​ありますか?私はファイルが初期化時に存在するかどうかをチェックし、ファイルが変更されていればそれをバックアップしたい。C# - 接続文字列からファイルパスを取得

サンプル接続文字列:

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

答えて

5

少し遅れて、おそらく、私は同じ問題に苦しんでこの質問を誘い込むに出くわしました。 |DataDirectory|フォルダの場所はAppDomain.CurrentDomain.GetData("DataDirectory")です。だからあなたたconnectionStringはこのように翻訳することができます:LocalDBとSqlConnectionオブジェクト(ないCE)のために

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

あなたは、既存のSQLコンパクトの接続文字列を解析するSqlCeConnectionStringBuilderクラスを使用することができます。

+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

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