文字列操作を使用して接続文字列を分割し、サーバー、データベース、uid、およびパスワードを取得することはありません。
次のリンクを読んで、受け入れられた答えを読んで、それが接続文字列からユーザーIDとパスワードを取得する最良の方法であることがわかりましたが、データベース名はどうですか?
SqlConnectionStringBuilderを使用して接続文字列からデータベース名を取得する方法。 (データソースはサーバー名ですか?)
InitialCatalogプロパティのMSDNドキュメント を参照してください。
接続に関連付けられているデータベースの名前を取得または設定します...
このプロパティは、接続文字列内の「初期カタログ」および「データベース」キーに対応しています...
プロバイダー固有のConnectionStringBuilderクラス(適切なネームスペース内)を使用するか、必要に応じてSystem.Data.Common.DbConnectionStringBuilder
を使用して接続文字列オブジェクトを抽象化できます。探している情報を指定するために使用されるプロバイダー固有のキーワードを知っている必要がありますが、SQL Serverの例では、次の2つのいずれかを実行できます。
System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(connectionString);
string server = builder.DataSource;
string database = builder.InitialCatalog;
または
System.Data.Common.DbConnectionStringBuilder builder = new System.Data.Common.DbConnectionStringBuilder();
builder.ConnectionString = connectionString;
string server = builder["Data Source"] as string;
string database = builder["Initial Catalog"] as string;
より簡単な代替方法は、接続オブジェクト自体から情報を取得することです。例えば:
IDbConnection connection = new SqlConnection(connectionString);
var dbName = connection.Database;
同様に、接続オブジェクトからサーバー名も取得できます。
DbConnection connection = new SqlConnection(connectionString);
var server = connection.DataSource;
string connectString = "Data Source=(local);" + "Integrated Security=true";
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);
Console.WriteLine("builder.InitialCatalog = " + builder.InitialCatalog);
これにより、Xactが得られます。
System.Data.SqlClient.SqlConnectionStringBuilder connBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder();
connBuilder.ConnectionString = connectionString;
string server = connBuilder.DataSource; //-> this gives you the Server name.
string database = connBuilder.InitialCatalog; //-> this gives you the Db name.
データベース名は SqlConnectionStringBuilder.InitialCatalog propertyの値です。
InitialCatalog Propertyまたはbuilder["Database"]
も使用できます。別のケースでテストしましたが、まだ動作します。