提取sql连接字符串的属性

RJ.*_*RJ. 10 c# substring

我想从connectionString(一个字符串变量)中提取服务器和数据库名称.当我们从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
Run Code Online (Sandbox Code Playgroud)

请注意名称更改(以及整个字符串的长度).

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

Chr*_*ray 37

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

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;
Run Code Online (Sandbox Code Playgroud)

让.net框架为你工作;)不要搞乱子串或正则表达式

  • +1:正则表达式很有趣,但这比我的答案更有意义.我甚至不知道`SqlConnectionStringBuilder`类已经存在!现在用作锅炉板来构建我的连接字符串. (3认同)
  • +1我比接受的答案更喜欢这个,因为它更不容易出现IMAO错误. (2认同)

Chr*_*gis 6

AC#Regex解决方案:

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;
}
Run Code Online (Sandbox Code Playgroud)

请记住网址的有效字符:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=
Run Code Online (Sandbox Code Playgroud)