Web.Config からデータベース接続文字列(ConnectionStrings)を取得する - 接続文字列を設定ファイルに記述する - ASP.NET

Web.Config からデータベース接続文字列(ConnectionStrings)を取得するコードを紹介します。

概要

ASP.NETアプリケーションで接続文字列をコード中に記述するのではなく設定ファイルに記述したい場合があります。ASP.NETでは接続文字列をWeb.config ファイルに記述することができます。この記事では、Web.configファイルへの接続文字列の記述とプログラムから接続文字列を取得するコードを紹介します。

書式

Web.Configに定義された データベースへの接続文字列、ConnectionStringsを取得するには、ConfigurationManagerを利用します。
ConfigurationManager.ConnectionStrings["(ConnectionString名)"].ConnectionString

コード例

web.config の記述例

web.config
<?xml version="1.0" encoding="utf-8"?>

<configuration>
    <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
    </system.web>
    <connectionStrings>
      <add name="ConnectionString"
          connectionString="Data Source=192.168.0.1; Initial Catalog=(データベース名);Connect Timeout=60;Persist Security Info=True; User ID=(DBのユーザー名);Password=(DBのパスワード)"
          providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

接続文字列の取得例

using System.Configuration;

// ...中略...

string ConnectionStr
   = ConfigurationManager.ConnectionStrings["MyConnectionStr"].ConnectionString;
SqlConnection con = new SqlConnection(ConnectionStr);

con.Open();
try{
  SqlCommand com = new SqlCommand("select * from table1",con);
  SqlDataReader sdr = com.ExecuteReader();
  while (sdr.Read()==true){
    Console.writeln(sdr["id"]);
    Console.writeln(sdr["name"]);
    Console.writeln(sdr["price"]);
  }
  com.Dispose();
}catch(SqlException exc){
  Console.writeln(exc.Message); 
}finally{
 con.Close();
 con.Dispose();
}

プログラム例

Web.config の記述

Web.configファイルに接続文字列を記述します。下記のWeb.configを作成します。
Web.config
<?xml version="1.0" encoding="utf-8"?>

<!--
  ASP.NET アプリケーションの構成方法の詳細については、
  https://go.microsoft.com/fwlink/?LinkId=169433 を参照してください
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.7.1"/>
    <httpRuntime targetFramework="4.7.1"/>
  </system.web>

  <connectionStrings>
    <add name="iPentecDBConnectionString"
        connectionString="Data Source=192.168.0.1; Initial Catalog=(データベース名);Connect Timeout=60;Persist Security Info=True; User ID=(DBのユーザー名);Password=(DBのパスワード)"
        providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

</configuration>

UI

下図のDefault.aspx Webフォームを作成します。

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ConnectionStringInWebConfig.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
          <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        </div>
    </form>
</body>
</html>

コード

下記のコードを記述します。
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;

namespace ConnectionStringInWebConfig
{
  public partial class Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      string ConnectionStr = ConfigurationManager.ConnectionStrings["iPentecDBConnectionString"].ConnectionString;
      Label1.Text = ConnectionStr;
    }
  }
}

解説

ConfigurationManager.ConnectionStringsプロパティを利用して接続文字列をWeb.configから取得します。ConnectionStringsの添え字部分には取得する接続文字列のnameの値を指定します。今回の例ではWeb.config に記述した接続文字列のnameに"iPentecDBConnectionString"を設定したため、同じ名称で指定します。取得した値はstring型のConnectionStr変数に代入します。
  string ConnectionStr = ConfigurationManager.ConnectionStrings["iPentecDBConnectionString"].ConnectionString;

ConnectionStr変数をLabelの文字列に表示します。
  Label1.Text = ConnectionStr;

実行結果

プロジェクトを実行します。Webブラウザが起動し下図の画面が表示されます。Web.config ファイルに記述した接続文字列が画面に表示されることが確認できます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2009-11-16
iPentec all rights reserverd.