「C Sharpとデータベース - データベースの接続」の版間の差分

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

文字列「</source>」を「</syntaxhighlight>」に置換
 
23行目: 23行目:
<br>
<br>


== 接続文字列の準備 ==
== 接続文字列の設定 ==
===== ソースコード上に埋め込む方法 =====
===== ソースコード上に埋め込む方法 =====
プロパティ値を設定するので、ソースコード上で接続先が変更できる。<br>
プロパティ値を設定して、ソースコード上で接続先を変更する。<br>
ただし、動的な切り替えができないため本番環境では使用すべきではない。<br>
<br>
  <syntaxhighlight lang="c#">
  <syntaxhighlight lang="c#">
  using System.Data.SqlClient;
  using System.Data.SqlClient;
44行目: 46行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
===== app.configまたはweb.configから取得する方法 =====
===== アプリケーション構成ファイル (app.config / web.config) から取得する方法 =====
テスト環境、本番環境でソースコードを変更せずに接続先を変更することができる。<br>
app.config / web.configは、アプリケーション構成ファイルとも呼ばれている。<br>
ただし、ユーザ名とパスワードを平文で記載する場合は、リリースフローや運用でパスワード管理方法を考える必要がある。<br>
これは、Microsoft .NET標準の設定値の保存場所である。<br>
<br>
アプリケーション構成ファイルのメリット<br>
* 接続情報をソースコードから分離できる。
* 環境ごとに設定が変更できる。
*: 例えば、環境別 (開発環境、テスト環境、本番環境) ごとに接続文字列を設定できる。
* パスワードの暗号化も可能である。
<br>
app.config / web.configは通称であり、実際には<アプリケーション名>.exe.Configという名前の場合が多い。<br>
一般的に、実行ファイルと同階層に生成されるが、設定によっては一部ユーザフォルダに配置されることもある。<br>
<br>
app.configには2種類のクラス (PropertiesおよびConfiguration) が用意されており、それぞれ役割とスコープを持つ。<br>
<br>
app.config / web.configの<code>connectionStrings</code>タグは、C#でデータベース接続文字列を管理するための重要な設定セクションである。<br>
ただし、ユーザ名とパスワードを平文で記述する場合は、リリース時や運用でパスワード管理方法を考える必要がある。<br>
<br>
<br>
app.configまたはweb.configのadd[@name]で指定された名前は、接続文字列を取得する際のキーになる。<br>
app.config / web.configのadd[@name]で指定された名前は、接続文字列を取得する時のキーになる。<br>
ソースコード上でこのキーを指定することで接続文字列を取得する。<br>
ソースコード上でこのキーを指定することで接続文字列を取得する。<br>
ここでは'''"sqlsvr"'''を利用しているが、特定できれば任意の文字列で問題ない。<br>
<br>
<syntaxhighlight lang="c#">
* name
using System.Configuration;
*: 接続文字列の識別子
* connectionString
public string GetConnectionString()
*: 実際の接続文字列
{
* providerName
    return ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString;
*: 使用するデータプロバイダ
}
<br>
</syntaxhighlight>
<u>※注意</u><br>
<u>パスワードは平文で保存せずに暗号化することを推奨する。</u><br>
<br>
  <syntaxhighlight lang="xml">
  <syntaxhighlight lang="xml">
<?xml version="1.0" encoding="utf-8" ?>
  <!-- app.configまたはweb.config -->
  <!-- app.configまたはweb.config -->
  <configuration>
  <configuration>
   <connectionStrings>
   <connectionStrings>
     <add name="sqlsvr" // 接続文字列
    <!-- SQL Server (通常) - SQL Server認証 -->
        connectionString="Data Source=(サーバー名/IPアドレス);
    <!-- SQL Server認証の場合はUser IDとPasswordを指定 -->
        Initial Catalog=(データベース名); // SQL Server認証なら不要
     <add name="<任意の接続文字列>"
        Persist Security Info=True;
          connectionString="Data Source=<サーバ名 / IPアドレス>;
        User ID=(ユーザー名);
          Initial Catalog=<データベース名 ※ただし、SQL Server認証なら不要>;
        Password=(パスワード)"
          Persist Security Info=True;
        providerName="System.Data.SqlClient"/>
          User ID=<DBユーザ名>;
          Password=<DBユーザのパスワード>"
          providerName="System.Data.SqlClient"/>
    <!-- SQL Server (通常) - Windows認証 -->
    <!-- Windows認証の場合はIntegrated Security=Trueを指定 -->
    <add name="<任意の接続文字列>"
          connectionString="Data Source=<サーバ名 / IPアドレス>;
          Initial Catalog=<データベース名>;
          Integrated Security=True"
          providerName="System.Data.SqlClient"/>
    <!-- SQL Server (LocalDB) -->
    <add name="<任意の接続文字列>"
          connectionString="Data Source=(LocalDB)\MSSQLLocalDB;
          Initial Catalog=<データベース名>;
          Integrated Security=True"
          providerName="System.Data.SqlClient"/>
    <!-- MySQL -->
    <!-- NuGetでMySql.Dataパッケージのインストール -->
    <!-- Uidでユーザ名、Pwdでパスワードを指定 -->
    <!-- ServerをData Sourceに変更してもよい -->
    <add name="MySQLConnection"
          connectionString="Server=<サーバ名 / IPアドレス>;
          Database=<データベース名>;
          Uid=<DBユーザ名>;
          Pwd=<DBユーザのパスワード>"
          providerName="MySql.Data.MySqlClient"/>
 
    <!-- SQLite 3 -->
    <!-- NuGetでSystem.Data.SQLiteパッケージのインストール -->
    <!-- ファイルベースのDBなので、Data SourceにDBファイルのパスを指定 -->
    <!-- |DataDirectory|はアプリケーションのデータディレクトリを示す特殊なプレースホルダ (省略可能) -->
    <!-- デスクトップアプリケーションの場合、既定では実行可能ファイルのディレクトリを指す -->
    <!-- Webアプリケーションの場合、App_Dataディレクトリを指す -->
    <add name="SQLiteConnection"
          connectionString="Data Source=|DataDirectory|<SQLiteファイルのパス>.db;
          Version=3;"
          providerName="System.Data.SQLite"/>
    <!-- Oracle -->
    <!-- NuGetでOracle.ManagedDataAccessパッケージのインストール -->
    <add name="OracleConnection"
          connectionString="Data Source=<TNS名>;
          User Id=<DBユーザ名>;
          Password=<DBユーザのパスワード>;"
          providerName="Oracle.ManagedDataAccess.Client"/>
   </connectionStrings>
   </connectionStrings>
  </configuration>
  </configuration>
  </syntaxhighlight>
  </syntaxhighlight>
<br>
SQLiteを使用する場合、Data Sourceの|DataDirectory|は、変更することができる。<br>
<br>
<syntaxhighlight lang="c#">
AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data"));
</syntaxhighlight>
<br>
<syntaxhighlight lang="c#">
// 接続文字列の取得と接続
using System.Configuration;
public string GetConnectionString()
{
    return ConfigurationManager.ConnectionStrings["<addタグのname属性の値>"].ConnectionString;
}
// データベースへ接続
public string Connect()
{
    var connectionString = GetConnectionString();
    using (var connection = new SqlConnection(connectionString))
    {
      connection.Open();
      // ...略
    }
}
</syntaxhighlight>
<br>
<br><br>
<br><br>