从连接字符串中获取特定值

时间:2017-11-29 17:27:51

标签: c# winforms

我的字符串如下;

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无法实现。

我该怎么做?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

您可以使用连接对象来检索所有这些信息。

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

对于服务器名称:

DbConnection connection = new SqlConnection(connectionString); 
var server = connection.DataSource;