【问题标题】:Extract properties of sql connection string [duplicate]提取sql连接字符串的属性[重复]
【发布时间】:2012-08-03 21:25:36
【问题描述】:

我想从连接字符串(字符串变量)中提取服务器和数据库名称。随着我们从 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

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

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

【问题讨论】:

  • 你用什么语言工作?
  • @Daniel 不是当 .net 提供一个类来处理这个问题时
  • @Daniel:您有问题并决定使用正则表达式解决它。现在你有两个...
  • 恕我直言,正则表达式是开发人员工具箱的一个很好的补充,只是我认为它不应该用作锤子......

标签: c# substring


【解决方案1】:

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

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 框架为您完成工作;)不要搞乱子字符串或正则表达式

【讨论】:

  • 啊,谢谢!一种不同的方式。
  • +1 我比接受的答案更喜欢这个,因为它不太容易出现错误 IMAO。
  • @user1336632 您不应该将其视为替代解决方案;这是正确的解决方案!当 .net 框架提供了一个类来处理你的场景时,你真的应该使用它。
  • +1 :正则表达式很有趣,但这比我的回答更有意义。我什至不知道SqlConnectionStringBuilder 课程的存在!现在用作样板来构建我的连接字符串。
  • 非常干净优雅的解决方案!好的!我对 OracleConnectionStringBuilder 做了同样的事情 - 工作就像一个魅力,让我省了很多头痛
【解决方案2】:

一个 C# 正则表达式解决方案:

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-._~:/?#[]@!$&'()*+,;=

【讨论】:

  • 然后显示它只是这样做? lblServer.Text = serverMatch.ToString(); lblDatabase.Text = databaseMatch.ToString();
  • 那行得通。如果我不想显示 "Source=" 和 "Catalog=" 怎么办?
  • @user1336632:请查看我的更新答案。
  • 那行得通。谢谢! :) 附言。 regex 和 Linq 有一些真正丑陋的语法!
猜你喜欢
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 2011-10-23
  • 2019-01-16
相关资源
最近更新 更多