2012-04-24 21 views
1

SQL接続文字列のセクションに一致する正規表現を書いています。最初の仕様では、初期カタログなどに特殊文字を含まないようにしました。だから私はSQL接続文字列とRegexとの一致部分

string strConn = "Data Source=VAIOE;Initial Catalog=SomeTextOnlyCatname;Integrated 
    Security=True;Persist Security Info=True;MultipleActiveResultSets=True;Connect Timeout=0;"; 
Regex databaseNameRegex = 
    new Regex(@"(?i)\b(Initial\sCatalog|Database)\b\s?=\s?(\w+\s*)*;?"); 

を持っていた今、私はInitial [email protected]@l0gName*6Symbolsを返すようにしたい

string strConn = "Data Source=VAIOE;Initial [email protected]@l0gName*6Symbols;Integrated 
    Security=True;Persist Security Info=True;MultipleActiveResultSets=True;Connect Timeout=0;"; 

例えば、シンボルと名前を持つことができますセクションを一致させるために句読点などを必要としています。

接続文字列にセミコロンの存在に起因する、私は

Regex databaseNameRegex = 
    new Regex(@"(?i)\b(Initial\sCatalog|Database)\b\s?=\s?(\w+\p{P}*\p{M}*\p{Z}*\s*)*;?"); 

を試してみましたが、これは失敗します。これに対処する最良の正規表現は何ですか?

お時間をいただきありがとうございます。

答えて

10

SqlConnectionを使用して接続文字列を解析し、RegExを回避できますか?あなただけのデータベース名が必要な場合は、次のように動作するはずです:

var conn = new SqlConnection(strConn); 
Console.WriteLine(conn.Database); 

EDIT

これを行うには良い方法はアロンGuralnekによって提供された - 感謝を!

これにはSqlConnectionStringBuilderを使用してください。必要な情報がすべて抽出されます。

var connBuilder = new SqlConnectionStringBuilder(strConn); 
Console.WriteLine(connBuilder.InitialCatalog); 
+3

私は実際に 'SqlConnectionStringBuilder'クラスを使用します。これは、接続文字列内のすべてのキーと値のペアへのアクセスを提供します。また、キーと値のペアから接続文字列を作成することもできます。したがって、初期カタログを取得するには、 'new SqlConnectionStringBuilder(myConnectionString).InitialCatalog'を使用できます。 –

+0

これは素晴らしいアイデアです。私は 'SqlConnectionStringBuilderClass'を使うと思います。 – MoonKnight

+0

それで、それは便利です! –

関連する問題