SqlConnectionStringBuilderを使用して接続文字列からデータベース名を取得する方法


87

文字列操作を使用して接続文字列を分割し、サーバー、データベース、UID、およびパスワードを取得したくありません。

私は次のリンクを読んで承認された回答を読みました。これが接続文字列からユーザーIDとパスワードを取得する最良の方法ですが、データベース名はどうですか?

接続文字列からユーザー名とパスワードを取得する正しい方法は?

SqlConnectionStringBuilderを使用して接続文字列からデータベース名を取得する方法。(DataSourceはサーバー名ですか?)

回答:



146

プロバイダー固有の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;

2
私にとって、最後の行は次のようにする必要 string database = builder["Initial Catalog"] as string;があります。-「データベース」は無効なキーワードでした。
サンドラ

@Sandraはい、そうです。文字列としてのbuilder ["Database"]は、SqlConnectionStringBuilderを使用する場合に機能します。
Romil Kumar Jain

30

より簡単な代替策は、接続オブジェクト自体から情報を取得することです。例えば:

IDbConnection connection = new SqlConnection(connectionString);
var dbName = connection.Database;

同様に、接続オブジェクトからサーバー名も取得できます。

DbConnection connection = new SqlConnection(connectionString);
var server = connection.DataSource;

これは私が探していたものです。ありがとう。
Ivan Santiago

これはに固有になりSqlConnectionます。このクロスRDBMSを作成する同様の方法はありますか?
Amit Joshi

@AmitJoshi彼ら全員が実装すべきではないIDbConnectionですか?
nawfal 2017

@nawfal:私は同意しますが、それでもまだ使用可能にはなりません。これについては、この質問で詳しく説明しました。stackoverflow.com/q/47727524/5779732
Amit Joshi

DatabaseとDataSourceを取得できますが、この方法でuserIdとパスワードを取得できませんでした。
Dush

11
string connectString = "Data Source=(local);" + "Integrated Security=true";

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

Console.WriteLine("builder.InitialCatalog = " + builder.InitialCatalog);

7

これにより、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.


4

InitialCatalogプロパティを使用することもできますbuilder["Database"]。私はそれを別のケースでテストしましたが、それでも動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.