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

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

Wiki がページ「SQL Serverに接続する(C Sharp)」を「C Sharpとデータベース - SQL Serverの接続」に、リダイレクトを残さずに移動しました
 
(同じ利用者による、間の3版が非表示)
23行目: 23行目:
<br>
<br>


== 接続文字列の準備 ==
== 接続文字列の設定 ==
===== ソースコード上に埋め込む方法 =====
===== ソースコード上に埋め込む方法 =====
プロパティ値を設定するので、ソースコード上で接続先が変更できる。<br>
プロパティ値を設定して、ソースコード上で接続先を変更する。<br>
  <source lang="c#">
ただし、動的な切り替えができないため本番環境では使用すべきではない。<br>
<br>
  <syntaxhighlight lang="c#">
  using System.Data.SqlClient;
  using System.Data.SqlClient;
   
   
42行目: 44行目:
     return builder.ToString();
     return builder.ToString();
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
===== app.configまたはweb.configから取得する方法 =====
===== アプリケーション構成ファイル (app.config / web.config) から取得する方法 =====
テスト環境、本番環境でソースコードを変更せずに接続先を変更することができる。<br>
app.config / web.configは、アプリケーション構成ファイルとも呼ばれている。<br>
ただし、ユーザ名とパスワードを平文で記載する場合は、リリースフローや運用でパスワード管理方法を考える必要がある。<br>
これは、Microsoft .NET標準の設定値の保存場所である。<br>
<br>
<br>
app.configまたはweb.configのadd[@name]で指定された名前は、接続文字列を取得する際のキーになる。<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>
app.config / web.configのadd[@name]で指定された名前は、接続文字列を取得する時のキーになる。<br>
ソースコード上でこのキーを指定することで接続文字列を取得する。<br>
ソースコード上でこのキーを指定することで接続文字列を取得する。<br>
ここでは'''"sqlsvr"'''を利用しているが、特定できれば任意の文字列で問題ない。<br>
<br>
  <source lang="c#">  
* name
*: 接続文字列の識別子
* connectionString
*: 実際の接続文字列
* providerName
*: 使用するデータプロバイダ
<br>
<u>※注意</u><br>
<u>パスワードは平文で保存せずに暗号化することを推奨する。</u><br>
<br>
<syntaxhighlight lang="xml">
<?xml version="1.0" encoding="utf-8" ?>
<!-- app.configまたはweb.config -->
<configuration>
  <connectionStrings>
    <!-- SQL Server (通常) - SQL Server認証 -->
    <!-- SQL Server認証の場合はUser IDとPasswordを指定 -->
    <add name="<任意の接続文字列>"
          connectionString="Data Source=<サーバ名 / IPアドレス>;
          Initial Catalog=<データベース名  ※ただし、SQL Server認証なら不要>;
          Persist Security Info=True;
          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>
</configuration>
</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;
  using System.Configuration;
   
   
  public string GetConnectionString()
  public string GetConnectionString()
  {
  {
     return ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString;
     return ConfigurationManager.ConnectionStrings["<addタグのname属性の値>"].ConnectionString;
}
// データベースへ接続
public string Connect()
{
    var connectionString = GetConnectionString();
    using (var connection = new SqlConnection(connectionString))
    {
      connection.Open();
      // ...略
    }
  }
  }
  </source>
  </syntaxhighlight>
<source lang="xml">
<br>
<!-- app.configまたはweb.config -->
<configuration>
  <connectionStrings>
    <add name="sqlsvr"  // 接続文字列
        connectionString="Data Source=(サーバー名/IPアドレス);
        Initial Catalog=(データベース名); // SQL Server認証なら不要
        Persist Security Info=True;
        User ID=(ユーザー名);
        Password=(パスワード)"
        providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>
</source>
<br><br>
<br><br>


83行目: 180行目:
一部のオブジェクトは破棄を保証する必要があるので、ソースコードに記載するのではなく、usingで担保するような実装を行う。<br>
一部のオブジェクトは破棄を保証する必要があるので、ソースコードに記載するのではなく、usingで担保するような実装を行う。<br>
スコープから外れた時点で破棄が必要なオブジェクトは自動的に破棄されるが、 usingを用いるとオブジェクトの破棄が明示的になる。<br>
スコープから外れた時点で破棄が必要なオブジェクトは自動的に破棄されるが、 usingを用いるとオブジェクトの破棄が明示的になる。<br>
  <source lang="c#">
  <syntaxhighlight lang="c#">
  using System;
  using System;
  using System.Configuration;
  using System.Configuration;
117行目: 214行目:
     }
     }
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
===== トランザクションを用いる方法 =====
===== トランザクションを用いる方法 =====
上記のusingとtry-catchに加えて、トランザクション処理を行う場合の実装例である。<br>
上記のusingとtry-catchに加えて、トランザクション処理を行う場合の実装例である。<br>
  <source lang="c#">
  <syntaxhighlight lang="c#">
  using System;
  using System;
  using System.Configuration;
  using System.Configuration;
176行目: 273行目:
     }
     }
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:C_Sharp]]
[[カテゴリ:C_Sharp]]