2017-11-29 21 views
2

私は以下のような文字列を持っています。接続文字列から特定の値を取得する

oradb = Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.87.50)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=testdb)));User Id = john; Password=test; 

私だけ'192.168.87.50' , '1521' , 'testdb' , 'john'接続文字列の上からを取得し、いくつかのテキストボックスに入れたいです。

私はregexpで作成しようとしましたが、regexpではできないことを理解しています。

どうすればいいですか?

+0

あなたはのConfigurationManagerを使用してのConnectionStringを読み、System.Configuration.ConnectionStringSettingsクラスをロードして、そこから[プロパティ]を使用して欲しいものを取得することができますか? –

+0

@ jmb.mageこれはwinform btwです。また、どのように私は指定されたパラメータを一つずつ得ることができます。これを答えとして書いてもらえますか? –

答えて

2

さらに便利な方法が必要ですが、これでもRegExpを使用できます。
は、このコードを試してみてください。

var input = 
    "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.87.50)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=testdb)));User Id = john; Password=test;"; 


var hostRegx = new Regex("HOST\\s*=\\s*(?<host>[^\\)]+)"); 
var portRegx = new Regex("PORT\\s*=\\s*(?<port>[^\\)]+)"); 
var dbRegx = new Regex("SERVICE_NAME\\s*=\\s*(?<db>[^\\)]+)"); 
var userRegx = new Regex("User Id\\s*=\\s*(?<user>[^;]+)"); 
var passRegx = new Regex("Password\\s*=\\s*(?<pass>[^;]+)"); 

var host = hostRegx.Match(input).Groups["host"].Value; 
var port = portRegx.Match(input).Groups["port"].Value; 
var db = dbRegx.Match(input).Groups["db"].Value; 
var user = userRegx.Match(input).Groups["user"].Value; 
var pass = passRegx.Match(input).Groups["pass"].Value; 
+0

チャームのように働いた。 –

+0

@johntrueありがとうございます。ところで、私は自分のアプローチを最適化することができます、おそらく1つの巨大な正規表現 –

1

あなたは、これらすべての情報を取得するために、接続オブジェクトを使用することができます。サーバー名の

SqlConnection connection = new SqlConnection(connectionString); var dbName = connection.Database; 

DbConnection connection = new SqlConnection(connectionString); 
var server = connection.DataSource; 
関連する問題