11

サーバー名とデータベース名を 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

名前の変更 (および文字列全体の長さ) に注意してください。

長さを知らずにデータ ソースと初期カタログをキャプチャするにはどうすればよいですか? そのため、フォームの読み込み時に、サーバーとデータベースの名前を取得してユーザーに表示します (ユーザーは、接続しているサーバーとデータベースを確認できますか?

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 に答える