カテゴリ: C# 更新日: 2026/02/16

C#のデータベース接続文字列の設定方法を完全ガイド!ADO.NETとEntity Framework初心者向け

C#でデータベース接続情報を設定する方法(接続文字列)
C#でデータベース接続情報を設定する方法(接続文字列)

先生と生徒の会話形式で理解しよう

生徒

「C#でデータベースに接続するには、どうすればいいんですか?」

先生

「データベースに接続するには、接続文字列という情報を設定する必要があります。これはデータベースへの住所のようなものですよ。」

生徒

「接続文字列ですか?具体的にどんな情報を書くんですか?」

先生

「サーバーの場所、データベース名、ユーザー名、パスワードなどを記述します。それでは、詳しく見ていきましょう!」

1. データベース接続文字列とは?

1. データベース接続文字列とは?
1. データベース接続文字列とは?

データベース接続文字列(コネクションストリング)とは、C#のプログラムがデータベースに接続するために必要な情報をまとめた文字列のことです。例えるなら、友達の家に遊びに行くときの「住所」や「電話番号」のようなものです。正確な情報がなければ、目的地にたどり着けないのと同じように、正しい接続文字列がなければデータベースに接続できません。

接続文字列には、サーバー名(どのコンピュータにデータベースがあるか)、データベース名(どのデータベースを使うか)、認証情報(ユーザー名とパスワード)などが含まれます。ADO.NETやEntity Frameworkといったデータベース操作の技術を使う際には、必ずこの接続文字列を設定する必要があります。

2. SQL Serverの接続文字列の基本構造

2. SQL Serverの接続文字列の基本構造
2. SQL Serverの接続文字列の基本構造

SQL Serverは、マイクロソフトが提供するデータベース管理システムです。C#と非常に相性が良く、多くの企業やアプリケーションで使われています。SQL Serverに接続するための接続文字列は、いくつかの要素から構成されています。

基本的な構造は、キー=値の形式で、セミコロン(;)で区切って複数の情報を並べます。主な要素は以下の通りです。

  • ServerまたはData Source:データベースサーバーの名前やIPアドレス
  • DatabaseまたはInitial Catalog:接続するデータベースの名前
  • User ID:データベースにログインするユーザー名
  • Password:ユーザーのパスワード
  • Integrated Security:Windows認証を使う場合の設定

それでは、実際のコード例を見てみましょう。


using System;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        // SQL Server認証を使った接続文字列
        string connectionString = "Server=localhost;Database=MyDatabase;User ID=sa;Password=MyPassword123;";
        
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            Console.WriteLine("データベースに接続しました!");
        }
    }
}

このコードでは、SqlConnectionクラスを使ってSQL Serverに接続しています。connectionString変数に接続情報を格納し、それをSqlConnectionのコンストラクタに渡すことで、データベースへの接続が確立されます。

3. Windows認証を使った接続文字列の設定

3. Windows認証を使った接続文字列の設定
3. Windows認証を使った接続文字列の設定

SQL ServerにはWindows認証という方法もあります。これは、Windowsにログインしているユーザーの情報を使ってデータベースに接続する方法です。ユーザー名とパスワードを毎回入力する必要がないため、より安全で便利な方法とされています。

Windows認証を使う場合は、接続文字列にIntegrated Security=TrueまたはIntegrated Security=SSPIを追加します。この場合、User IDやPasswordは不要になります。


using System;
using System.Data.SqlClient;

class DatabaseConnectionExample
{
    static void Main()
    {
        // Windows認証を使った接続文字列
        string connectionString = "Server=localhost;Database=SampleDB;Integrated Security=True;";
        
        try
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                Console.WriteLine("Windows認証でデータベースに接続成功!");
                Console.WriteLine($"接続先データベース: {connection.Database}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"接続エラー: {ex.Message}");
        }
    }
}

このコードでは、try-catch文を使ってエラー処理も行っています。データベース接続は失敗することもあるため、エラーが発生した場合に適切に対処できるようにすることが重要です。

4. App.configやappsettings.jsonで接続文字列を管理する方法

4. App.configやappsettings.jsonで接続文字列を管理する方法
4. App.configやappsettings.jsonで接続文字列を管理する方法

プログラムのコード内に直接接続文字列を書くと、セキュリティ上の問題があります。パスワードなどの機密情報がソースコードに含まれてしまうためです。また、データベースのサーバーを変更するたびにコードを修正する必要があり、メンテナンスが大変です。

そこで、接続文字列は設定ファイルに記述するのが一般的です。.NET FrameworkではApp.config、.NET Coreや.NET 5以降ではappsettings.jsonというファイルを使います。

App.configファイルでの記述例は以下の通りです。


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="MyDatabaseConnection" 
         connectionString="Server=localhost;Database=MyDatabase;Integrated Security=True;" 
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

C#コードから、この設定ファイルの接続文字列を読み込むには、ConfigurationManagerクラスを使用します。


using System;
using System.Configuration;
using System.Data.SqlClient;

class ConfigFileExample
{
    static void Main()
    {
        // App.configから接続文字列を取得
        string connectionString = ConfigurationManager.ConnectionStrings["MyDatabaseConnection"].ConnectionString;
        
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            Console.WriteLine("設定ファイルから読み込んだ接続文字列で接続しました!");
        }
    }
}

このように設定ファイルを使うことで、コードを変更せずにデータベースの接続先を変更できるようになります。開発環境と本番環境で異なるデータベースを使う場合にも便利です。

5. Entity Frameworkでの接続文字列の設定

5. Entity Frameworkでの接続文字列の設定
5. Entity Frameworkでの接続文字列の設定

Entity Framework(EF)は、C#でデータベース操作を行うための便利なツールです。オブジェクト指向プログラミングの考え方でデータベースを扱えるため、SQLを直接書かなくても済むことが多く、初心者にも扱いやすいフレームワークです。

Entity Frameworkでも、接続文字列の設定が必要です。DbContextクラスを継承したクラスを作成し、OnConfiguringメソッドで接続文字列を指定します。


using System;
using Microsoft.EntityFrameworkCore;

// データベースのテーブルに対応するクラス
public class Product
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public decimal Price { get; set; }
}

// DbContextクラスを継承
public class MyDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }
    
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // Entity Frameworkでの接続文字列設定
        optionsBuilder.UseSqlServer("Server=localhost;Database=ShopDB;Integrated Security=True;");
    }
}

class Program
{
    static void Main()
    {
        using (var context = new MyDbContext())
        {
            Console.WriteLine("Entity Frameworkでデータベースに接続しました!");
        }
    }
}

Entity Frameworkを使うと、データベースのテーブルをC#のクラスとして扱えます。上記の例では、Productクラスがデータベースの商品テーブルに対応しています。このようなオブジェクトリレーショナルマッピング(ORM)という技術により、プログラミングがより直感的になります。

6. MySQLやPostgreSQLなど他のデータベースの接続文字列

6. MySQLやPostgreSQLなど他のデータベースの接続文字列
6. MySQLやPostgreSQLなど他のデータベースの接続文字列

C#はSQL Server以外のデータベースにも接続できます。MySQLやPostgreSQL、SQLiteなど、さまざまなデータベース管理システムに対応しています。それぞれのデータベースで、接続文字列の書き方が少し異なります。

MySQLの場合、MySQL.Data.dllというライブラリを使用します。接続文字列の例は以下の通りです。


using System;
using MySql.Data.MySqlClient;

class MySQLConnectionExample
{
    static void Main()
    {
        // MySQLの接続文字列
        string connectionString = "Server=localhost;Database=testdb;User ID=root;Password=password;";
        
        using (MySqlConnection connection = new MySqlConnection(connectionString))
        {
            connection.Open();
            Console.WriteLine("MySQLデータベースに接続しました!");
        }
    }
}

PostgreSQLの場合は、Npgsqlというライブラリを使います。接続文字列はHostDatabaseUsernamePasswordなどのキーワードを使います。SQLiteの場合は、ファイルベースのデータベースなので、Data Sourceにファイルパスを指定するだけで接続できます。

7. 接続文字列のセキュリティ対策

7. 接続文字列のセキュリティ対策
7. 接続文字列のセキュリティ対策

データベース接続文字列には、パスワードなどの機密情報が含まれています。そのため、セキュリティ対策をしっかり行うことが非常に重要です。以下のような対策を行うことで、情報漏洩のリスクを減らすことができます。

1. 設定ファイルの暗号化:App.configやappsettings.jsonに記述した接続文字列を暗号化することができます。.NET Frameworkには、設定セクションを暗号化する機能が用意されています。

2. 環境変数の利用:接続文字列を環境変数に保存し、プログラムから読み取る方法もあります。これにより、ソースコードや設定ファイルに機密情報を書かずに済みます。

3. Azure Key VaultやAWS Secrets Manager:クラウド環境では、専用のシークレット管理サービスを使うことで、より安全に接続文字列を管理できます。

4. 最小権限の原則:データベースユーザーには、必要最小限の権限のみを付与します。すべての操作ができる管理者権限を持つユーザーではなく、読み取りや書き込みなど、必要な操作のみができるユーザーを作成します。

セキュリティは後回しにされがちですが、個人情報や企業の重要なデータを扱う場合は特に注意が必要です。

8. 接続プールとパフォーマンス最適化

8. 接続プールとパフォーマンス最適化
8. 接続プールとパフォーマンス最適化

データベースへの接続は、実は結構時間がかかる処理です。毎回新しい接続を作成していると、アプリケーションの動作が遅くなってしまいます。そこで、ADO.NETには接続プールという仕組みがあります。

接続プールは、一度使った接続を閉じるときに完全に破棄せず、プールという場所に保管しておく仕組みです。次に接続が必要になったときに、新しく作るのではなく、プールから取り出して再利用します。これにより、パフォーマンスが大幅に向上します。

接続プールは、デフォルトで有効になっていますが、接続文字列で細かく制御することもできます。

  • Pooling:接続プールを有効にするかどうか(デフォルトはtrue)
  • Min Pool Size:プール内に保持する最小接続数
  • Max Pool Size:プール内に保持する最大接続数(デフォルトは100)
  • Connection Timeout:接続のタイムアウト時間(秒単位、デフォルトは15秒)

適切に接続プールを設定することで、アプリケーションのパフォーマンスを最適化できます。ただし、むやみに最大プールサイズを大きくすると、データベースサーバーに負荷がかかるので注意が必要です。

9. 接続文字列のトラブルシューティング

9. 接続文字列のトラブルシューティング
9. 接続文字列のトラブルシューティング

データベースに接続できないというエラーは、初心者が最も頻繁に遭遇する問題の一つです。接続文字列に問題がある場合、いくつかの典型的なエラーメッセージが表示されます。

「サーバーが見つからないか、アクセスできません」というエラーは、Server名が間違っているか、ネットワークの問題、またはSQL Serverのサービスが起動していない可能性があります。まず、サーバー名が正しいか確認し、SQL Server Configuration ManagerでSQL Serverのサービスが実行中かチェックしましょう。

「ログインに失敗しました」というエラーは、ユーザー名やパスワードが間違っているか、そのユーザーにデータベースへのアクセス権限がない可能性があります。SQL Server Management Studio(SSMS)などのツールで、同じ認証情報でログインできるか試してみましょう。

「データベースを開けません」というエラーは、指定したデータベース名が存在しない可能性があります。データベース名のスペルミスや、大文字小文字の違いに注意してください。

また、ファイアウォールがSQL Serverのポート(デフォルトは1433番)をブロックしている場合もあります。ネットワーク管理者に確認するか、ファイアウォールの設定を見直してみましょう。

10. 実践的な接続文字列の使用例

10. 実践的な接続文字列の使用例
10. 実践的な接続文字列の使用例

最後に、実際のアプリケーション開発でよく使われる、実践的な接続文字列の使用例を見てみましょう。ここでは、データベースからデータを取得して表示する簡単なプログラムを作成します。


using System;
using System.Data.SqlClient;

class ProductListApp
{
    static void Main()
    {
        // 接続文字列の設定
        string connectionString = "Server=localhost;Database=ShopDB;Integrated Security=True;Connection Timeout=30;";
        
        // SQLクエリ
        string query = "SELECT ProductId, ProductName, Price FROM Products";
        
        try
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                Console.WriteLine("データベース接続成功!商品一覧を取得します。\n");
                
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        Console.WriteLine("{0,-10} {1,-30} {2,10}", "商品ID", "商品名", "価格");
                        Console.WriteLine(new string('-', 55));
                        
                        while (reader.Read())
                        {
                            int productId = reader.GetInt32(0);
                            string productName = reader.GetString(1);
                            decimal price = reader.GetDecimal(2);
                            
                            Console.WriteLine("{0,-10} {1,-30} {2,10:C}", productId, productName, price);
                        }
                    }
                }
            }
        }
        catch (SqlException ex)
        {
            Console.WriteLine($"データベースエラー: {ex.Message}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"エラー: {ex.Message}");
        }
    }
}

データベース接続成功!商品一覧を取得します。

商品ID     商品名                                  価格
-------------------------------------------------------
1          ノートパソコン                      ¥89,800
2          ワイヤレスマウス                     ¥2,980
3          USB充電ケーブル                      ¥1,280

このプログラムでは、接続文字列にConnection Timeout=30を追加して、接続のタイムアウトを30秒に設定しています。SqlCommandクラスでSQLクエリを実行し、SqlDataReaderでデータを一行ずつ読み取って表示しています。

using文を使うことで、データベース接続やコマンド、リーダーなどのリソースが自動的に解放されます。これは非常に重要で、リソースを適切に解放しないとメモリリークやデータベース接続の枯渇などの問題が発生します。

実際の開発では、このようにエラー処理をしっかり行い、リソース管理に注意を払うことで、安定したアプリケーションを作ることができます。接続文字列は、その第一歩となる重要な要素です。正しく設定し、セキュリティに配慮しながら使用することで、安全で効率的なデータベースアプリケーションを構築できるようになります。

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのPERFORM文をマスターしよう!初心者でもできる繰り返し処理の基本
New2
COBOL
COBOLのファイル論理名と物理名管理|初心者でもわかるコツと実例
New3
C#
C#のデータベース接続文字列の設定方法を完全ガイド!ADO.NETとEntity Framework初心者向け
New4
COBOL
COBOLのEVALUATE TRUEの使い方を完全ガイド!初心者でもわかる条件分岐とパターンマッチ
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
No.3
Java&Spring記事人気No3
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.4
Java&Spring記事人気No4
C#
C#でデータを取得する基本!ExecuteReader・ExecuteScalarの違いを初心者向けに解説
No.5
Java&Spring記事人気No5
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.6
Java&Spring記事人気No6
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.7
Java&Spring記事人気No7
COBOL
COBOLのMOVE文を完全ガイド!初心者でもわかるデータ移送の基本
No.8
Java&Spring記事人気No8
COBOL
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法