文字列操作を使用して接続文字列を分割し、サーバー、データベース、UID、およびパスワードを取得したくありません。
私は次のリンクを読んで承認された回答を読みました。これが接続文字列からユーザーIDとパスワードを取得する最良の方法ですが、データベース名はどうですか?
接続文字列からユーザー名とパスワードを取得する正しい方法は?
SqlConnectionStringBuilderを使用して接続文字列からデータベース名を取得する方法。(DataSourceはサーバー名ですか?)
文字列操作を使用して接続文字列を分割し、サーバー、データベース、UID、およびパスワードを取得したくありません。
私は次のリンクを読んで承認された回答を読みました。これが接続文字列からユーザーIDとパスワードを取得する最良の方法ですが、データベース名はどうですか?
接続文字列からユーザー名とパスワードを取得する正しい方法は?
SqlConnectionStringBuilderを使用して接続文字列からデータベース名を取得する方法。(DataSourceはサーバー名ですか?)
回答:
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;
SqlConnection
ます。このクロスRDBMSを作成する同様の方法はありますか?
IDbConnection
ですか?
これにより、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プロパティの値です。
InitialCatalogプロパティを使用することもできますbuilder["Database"]
。私はそれを別のケースでテストしましたが、それでも動作します。
string database = builder["Initial Catalog"] as string;
があります。-「データベース」は無効なキーワードでした。