■データベース接続文字列をプログラムから参照できるように保存する。
○接続文字列の生成
Visual Studio 2017 ツール→データベースへの接続 から、ダイアログにしたがって、SQL Server を追加した。
すると、サーバーエクスプローラーに、追加したSQL Serverが表示される。
このプロパティーから接続文字列を拾い出した。(例)
Data Source=127.0.0.1\TESTinstance;Initial Catalog=testdb;Persist Security Info=True;User ID=sa;Password=abcdefg(注意)
127.0.0.1\InstanceName で接続する場合、SQL Server browser を起動していなければならない。
初期状態では起動もしておらず、起動することもできない状態になっている。
コントロールパネル→管理ツール→サービス→SQL Server browser から、起動するように設定しておく。
○接続文字列情報の追加
appsettings.json の初期状態の内容を確認した。
{次のように、接続文字列情報を追加した。
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
参照用の名前は、testDatabase とした。
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionStrings": {
"testDatabase": "Data Source=127.0.0.1\TESTinstance;Initial Catalog=testdb;Persist Security Info=True;User ID=sa;Password=abcdefg;"
}
}
■接続文字列を取得するコードを作成した。
○JSON形式の情報の読み取りに必要なパッケージの追加
NuGetで以下を追加した。
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.Configuration.Binder
○取得までの流れ
IConfigurationRootのインスタンスを生成する。
このIConfigurationRootのインスタンスは、カレントディレクトリ内のappsettings.jsonを取り扱うメソッドを備えている。
たとえば、GetConnectionStringで、キーを指定して接続文字列を取得することができる。
IConfigurationRootのインスタンスは、ConfigurationBuilderインスタンス生成し設定したうえで、このBuildメソッドによって生成される。
このとき、appsettings.jsonへのパスは何らかの方法で指定しなければならない。
○appsettings.jsonへのパスを直接コードに埋め込む方法。
(実用的でない。これは動作テスト用である。)
IConfigurationRoot configuration = new ConfigurationBuilder() .AddJsonFile(@"C:\Users\root\source\repos\WebApp_test01\WebApp_test01\appsettings.json", false)
.Build();
string constr = configuration.GetConnectionString("testDatabase");
○appsettings.jsonへのパスを動的に取得する方法。
上の例では appsettings.json のパスが固定されているからいけない。
これを動的に指定したい。
また、共通して使えるIConfigurationRootのインスタンスは、プログラム起動時に一回だけ生成しておき、
後でいつでも参照できるようにしたい。
先ず、次のように、Programクラスに、staticメンバ(IConfigurationRoot configuration)を追加して、
Mainメソッド内でConfigurationBuilderによって生成したIConfigurationRootのインスタンスの参照を保存するようにする。
public class Program次に、appsettings.jsonを参照するには、次のように、
{
public static IConfigurationRoot configuration;
public static void Main(string[] args)
{
configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile(@"appsettings.json", false).Build();
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
<略>
さきのProgramクラスを指定しその静的メンバであるconfigurationを参照することで、
先ほどのIConfigurationRootのインスタンスがもつアクセス用メソッドを呼び出す。
public class MyRepository
{
public SqlConnection con; //using System.Data.SqlClient;
private void connection()
{
string constr = Program.configuration.GetConnectionString("testDatabase");
con = new SqlConnection(constr);
}
<略>
以上
NuGet
System.Data.Common
System.Data.SqlClient
ASP.NET MVCプログラミング入門 (マイクロソフト関連書) 新品価格 |
<参考>
・I cannot start SQL Server browser
< https://stackoverflow.com/questions/21375014/i-cannot-start-sql-server-browser > 2018年3月17日
▲json形式ファイルに保存された接続文字列情報
・Configure an ASP.NET Core App / JSON configuration
< https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?tabs=basicconfiguration > 2018年3月20日
・Connection Strings/ASP.NET Core
< https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-strings#aspnet-core > 2018年3月17日
・.NET Core のコンソ-ルアプリケーションで設定ファイルを利用する
< https://qiita.com/abpla/items/c4faeed42bef4d450c8d >2018年3月18日
・Using .NET Core Configuration with legacy projects
< http://benfoster.io/blog/net-core-configuration-legacy-projects > 2018年3月18日