11

我想从连接字符串(字符串变量)中提取服务器和数据库名称。当我们从 DEV 移动到 STAGE 再到 PROD 时,服务器和数据库的名称会发生​​变化。

这是一个例子:

Data Source=SERVER_XYZ;Initial Catalog=DATABASE_XYZ;User ID=us;Password=pass

Data Source=SERVER_XYZPQR;Initial Catalog=DATABASE_XYZPQR;User ID=us;Password=pass

注意名称的变化(以及整个字符串的长度)。

如何在不知道长度的情况下捕获数据源和初始目录?这样在表单加载时,它将获取服务器和数据库名称以显示给用户(以便他/她可以看到他/她连接到哪个服务器和数据库?

4

2 回答 2

38

您可以使用连接字符串构建器类,该构建器类一旦构建就具有数据源和初始目录属性

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.aspx

string connStr = "Data Source=SERVERx;Initial Catalog=DBx;User ID=u;Password=p"; 

var csb = new SqlConnectionStringBuilder(connStr);

string dataSource = csb.DataSource;
string initialCatalog = csb.InitialCatalog;

让 .net 框架为您完成工作;)不要搞乱子字符串或正则表达式

于 2012-08-03T21:38:12.507 回答
5

AC#正则表达式解决方案:

String input = "Data Source=SERVER_XYZ;Initial Catalog=DATABASE_XYZ;User ID=us;Password=pass";

// Match the server:
Match serverMatch = Regex.Match(input, @"Source=([A-Za-z0-9_.]+)", RegexOptions.IgnoreCase);

// Match the database:
Match databaseMatch = Regex.Match(input, @"Catalog=([A-Za-z0-9_]+)", RegexOptions.IgnoreCase);

// Get the string
if (serverMatch.Success)
{
  String server = serverMatch.Groups[1].Value;
}

请记住 URL 的有效字符:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=
于 2012-08-03T21:35:13.867 回答