.NET関数を使用してapp.configのこのようなconnectionStringからユーザーとパスワードを取得するにはどうすればよいですか?
もちろん、その文字列を読み取って、ID =とPassword =の後に値を取得することもできます。
<connectionStrings>
<add name="MyConString" connectionString="Data Source=(local);Initial Catalog=MyDatabase;Persist Security Info=True;User ID=MyUsername Password=MyPassword;Connect providerName="System.Data.SqlClient"/>
</connectionStrings>
connectionBuilderClassを使用する
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder("Your connection string");
string password = builder.Password;
と一緒に
string connString = ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString;
これを達成するために。
SqlConnectionStringBuilder con = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
string myUser = con.UserID;
string myPass = con.Password;
接続文字列(1つのデータベースプロバイダーの詳細を処理しないもの)を解析するためのより一般的なアプローチが必要な場合は、次を使用することもできます。
System.Data.Common.DbConnectionStringBuilder
これは、SqlConnectionStringBuilderなどの他のクラスの基本クラスです。
DbConnectionStringBuilderのインスタンスを作成できます。私の場合、データベースプロバイダーの種類に関係なく、情報を取得できる構成可能な接続文字列が1つ必要でした。この柔軟性が必要な場合のいくつかのオプション(他の人が提案しているようにプロバイダーに適切なConnectionStringBuilderを作成できます)は、プロバイダー固有のプロパティが必要なほとんどの場合に必要になる可能性があります。
または、いくつかの一般的なプロパティだけを読み取りたい場合、たとえばユーザーIDとパスワードだけが必要な場合は、DbConnectionStringBuilderを使用できます。
このサンプルは、ユーザーIDとパスワードを含むすべての接続文字列で機能するはずです。
DbConnectionStringBuilder db = new DbConnectionStringBuilder();
db.ConnectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
var username = db["User Id"].ToString();
var password = db["Password"].ToString();
var builder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["MyConString"].ConnectionString)
var user = builder.UserID;
var password = builder.Password;
以下から接続文字列を取得できます
SqlConnectionStringBuilder yourconn = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
string password = yourconn.Password;
次に、探している部分文字列を取得できます。
public static string GetConnectionSettings(string searchSetting )
{
var con = ConfigurationManager.ConnectionStrings["yourConnectionHere"].ConnectionString;
String[] myString = con.Split(';');
Dictionary<string, string> dict = new Dictionary<string, string>();
for (int i = 0; i < myString.Count(); i++)
{
String[] con3 = myString[i].Split('='); dict.Add(con3[0], con3[1]);
}
return dict[searchSetting];
}
searchSettingには、「ユーザーは」またはパスワードを使用できます。
別の方法は、より寛容なパターンで正規表現(私が行った)を使用して、接続文字列でユーザーIDを提供できるさまざまな方法を処理することです。
public static string GetUserIdFromConnectionString(string connectionString)
{
return new Regex("USER\\s+ID\\=\\s*?(?<UserId>\\w+)",
RegexOptions.IgnoreCase)
.Match(connectionString)
.Groups["UserId"]
?.Value;
}
system.Configurationへの参照を追加してから、次を使用します。usingSystem.Configuration;
string MyDBConnection = ConfigurationManager.ConnectionStrings["MyDBConnection"].ConnectionString;
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(MyDBConnection);
string UserID = builder.UserID;
string Password = builder.Password;
string ServerName = builder.DataSource;
string DatabaseName = builder.InitialCatalog;
TomasWalekの答えに少し追加するだけです。
このアプローチは、接続文字列の「ユーザーID」が正しく大文字になっている場合にのみ機能します。 Oracleプロバイダーは「ユーザーID」を受け入れましたが、SqlConnectionStringBuilder
は機能しませんでした。
public static class DbConnectionFactory
{
public static ConnectionStringSettings AppConnectionSettings = ConfigurationManager.ConnectionStrings["{A connection string name}"];
public static SqlConnectionStringBuilder AppConnBuilder = new SqlConnectionStringBuilder(AppConnectionSettings.ConnectionString);
public static string DbUserID
{
get
{
return AppConnBuilder.UserID;
}
set { }
}
}