C#.NETでデータベースを使うアプリを作る場合、SQL Serverは非常に相性のよい選択肢です。

ただし、最初から本格的なSQL Server ExpressやSQL Server Developerを入れると、インスタンス設定、サービス管理、認証設定などでつまずくことがあります。

そこで学習やローカル開発に向いているのが SQL Server LocalDB です。

LocalDBは、開発者向けの軽量なSQL Server環境です。Microsoft公式では、LocalDBはSQL Server Expressの機能であり、SQL Server Database Engineの最小限のファイルをコピーし、接続時に必要なSQL Server環境を自動的に作成・起動できるものとして説明されています。

この記事では、Visual Studio C#.NETとSQL Server LocalDBを使うために必要な環境、SSMSからSQLを実行する方法、C#からSQLコマンドを実行する方法を解説します。

この記事でわかること

この記事では、以下の内容を解説します。

  • C#.NETとSQL Server LocalDBで必要な環境
  • SQL Server LocalDBとは何か
  • SQL Server Express本体とLocalDBの違い
  • SSMSからLocalDBへ接続する方法
  • SSMSでSQLコマンドを実行する方法
  • Visual StudioでC#プロジェクトを作る方法
  • C#からLocalDBへ接続する方法
  • C#からSQLコマンドを実行する方法
  • SSMSで実行するSQLとC#から実行するSQLの違い

SQLとは何かについて知りたい方は以下を参考にしてください。

必要な環境

今回使用する環境は以下です。

必要なもの用途
Visual Studio(2022)C#を書く開発環境
.NET(4.8)C#アプリを動かす実行環境
SQL Server LocalDBローカル開発用の軽量SQL Server
SQL Server Management Studio(22)SQLを手動で実行・確認する管理ツール
Microsoft.Data.SqlClientC#からSQL Serverへ接続するライブラリ

SQL Server LocalDBとは

SQL Server LocalDBは、開発者向けの軽量なSQL Server環境です。

通常のSQL Server Expressのように、常にサービスとして動作させるというより、アプリやツールから接続されたタイミングで必要な環境が起動します。

Microsoft公式では、LocalDBは開発者向けのSQL Server Express機能であり、複雑な構成作業なしでTransact-SQLコードを書いてテストできるSQL Server Database Engineを提供するものとして説明されています。

LocalDBを使うメリット

LocalDBには以下のメリットがあります。

  • 学習用に使いやすい
  • ローカル開発に向いている
  • サービス管理をあまり意識しなくてよい
  • Visual Studioとの相性がよい
  • C#.NETから接続しやすい
  • 本格的なSQL Serverの前段階として学べる

SQL Server ExpressとLocalDBの違い

SQL Server ExpressとLocalDBは似ていますが、用途が少し違います。

項目SQL Server ExpressSQL Server LocalDB
用途小規模アプリ・ローカルサーバー開発・学習・ローカル検証
動作サービスとして常駐しやすい必要時に起動する軽量インスタンス
管理やや必要少なめ
初心者向け少し設定が多い比較的扱いやすい
C#学習使えるとても使いやすい
本番運用小規模なら可能基本的に開発向け

今回の記事では、C#.NETからSQLを試すこと が目的なので、LocalDBを使います。

SQL Server LocalDBを準備する

LocalDBは、Visual Studioをインストールした環境に入っている場合があります。
まず、コマンドプロンプトまたはPowerShellで以下を実行します。

sqllocaldb info

以下のように「MSSQLLocalDB」が表示されれば、LocalDBが使えます。

詳細を確認する場合は、以下を実行します。

sqllocaldb info MSSQLLocalDB

SQL Server Management Studioを準備する

SQL Server Management Studio、通称 SSMS は、SQL ServerやLocalDBに接続してSQLを実行するための管理ツールです。

SQL Server Management Studioのインストールはこちらから。

SSMSからLocalDBへ接続する

SSMSを起動したら、接続画面で以下を入力します。

項目入力内容
サーバーの種類データベース エンジン
サーバー名(localdb)\MSSQLLocalDB
認証Windows 認証

接続できれば、オブジェクトエクスプローラーにLocalDBの情報が表示されます。

SSMSからSQLコマンドを実行する

まずはSSMSからデータベースを作成します。

データベース作成

まずは、オブジェクトエクスプローラーの「localdb」を選択し、「新しいクエリ」を選択。

次にクエリにSQLを入力し「実行」すると、データベースが作成されます。

実行後、成功するとオブジェクトエクスプローラーに作成されます。
オブジェクトエクスプローラーはすぐに反映されないので、更新をすると表示される。

SSMSでテーブルを作成する

この記事では、以下のような簡単なECサイト風のデータを使います。
ユーザー、商品、注文、注文詳細を扱う構成です。

テーブル:users
user_iduser_nameprefecturestatus
1AkiTokyoactive
2BoraOsakaactive
3ChinTokyoinactive
4DaiFukuokaactive
5EmaHokkaidoactive
テーブル:products
product_idproduct_namepriceactive
1Laptop1200001
2Headphones150001
3Mouse30001
4Novel18001
5Keyboard80000
テーブル:orders
order_iduser_idorder_datestatuscoupon_code
100112025-04-01paidSPRING10
100212025-04-15shippedNULL
100322025-04-03paidNULL
100422025-04-20cancelledNULL
100542025-04-25paidVIP
テーブル:order_items
order_item_idorder_idproduct_idquantityunit_price
1100111120000
21001323000
310022115000
41002431800
510032215000
61003313000
71004518000
8100511120000
910052115000
101005313000

以下が作成クエリです。

CREATE TABLE users (
  user_id INTEGER PRIMARY KEY,
  user_name VARCHAR(50) NOT NULL,
  email VARCHAR(100) NOT NULL,
  prefecture VARCHAR(50),
  signup_date DATE NOT NULL,
  status VARCHAR(20) NOT NULL
);

CREATE TABLE products (
  product_id INTEGER PRIMARY KEY,
  product_name VARCHAR(100) NOT NULL,
  price DECIMAL(10,2) NOT NULL,
  active INTEGER NOT NULL DEFAULT 1
);

CREATE TABLE orders (
  order_id INTEGER PRIMARY KEY,
  user_id INTEGER NOT NULL,
  order_date DATE NOT NULL,
  status VARCHAR(20) NOT NULL,
  coupon_code VARCHAR(30),
  note VARCHAR(200),
  FOREIGN KEY (user_id) REFERENCES users(user_id)
);

CREATE TABLE order_items (
  order_item_id INTEGER PRIMARY KEY,
  order_id INTEGER NOT NULL,
  product_id INTEGER NOT NULL,
  quantity INTEGER NOT NULL,
  unit_price DECIMAL(10,2) NOT NULL,
  FOREIGN KEY (order_id) REFERENCES orders(order_id),
  FOREIGN KEY (product_id) REFERENCES products(product_id)
);

実行して成功するとこのようにテーブルの中にテーブルデータが作成されます。

SSMSでデータを登録する

次に、サンプルデータを登録します。
※赤下波線がでるが実行しても問題ない。

INSERT INTO users 
(user_id, user_name, email, prefecture, signup_date, status) 
VALUES
(1, 'Aki',  'aki@example.com',  'Tokyo',    '2025-01-10', 'active'),
(2, 'Bora', 'bora@example.com', 'Osaka',    '2025-02-12', 'active'),
(3, 'Chin', 'chin@example.com', 'Tokyo',    '2025-02-20', 'inactive'),
(4, 'Dai',  'dai@example.com',  'Fukuoka',  '2025-03-05', 'active'),
(5, 'Ema',  'ema@example.com',  'Hokkaido', '2025-03-10', 'active');

INSERT INTO products 
(product_id, product_name, price, active) 
VALUES
(1, 'Laptop',     120000.00, 1),
(2, 'Headphones', 15000.00, 1),
(3, 'Mouse',       3000.00, 1),
(4, 'Novel',       1800.00, 1),
(5, 'Keyboard',    8000.00, 0);

INSERT INTO orders 
(order_id, user_id, order_date, status, coupon_code, note) 
VALUES
(1001, 1, '2025-04-01', 'paid',      'SPRING10', 'first order'),
(1002, 1, '2025-04-15', 'shipped',   NULL,       NULL),
(1003, 2, '2025-04-03', 'paid',      NULL,       'gift'),
(1004, 2, '2025-04-20', 'cancelled', NULL,       NULL),
(1005, 4, '2025-04-25', 'paid',      'VIP',      NULL);

INSERT INTO order_items 
(order_item_id, order_id, product_id, quantity, unit_price) 
VALUES
(1,  1001, 1, 1, 120000.00),
(2,  1001, 3, 2,   3000.00),
(3,  1002, 2, 1,  15000.00),
(4,  1002, 4, 3,   1800.00),
(5,  1003, 2, 2,  15000.00),
(6,  1003, 3, 1,   3000.00),
(7,  1004, 5, 1,   8000.00),
(8,  1005, 1, 1, 120000.00),
(9,  1005, 2, 1,  15000.00),
(10, 1005, 3, 1,   3000.00);

SSMSでSELECTを実行する

登録したデータを確認します。

SELECT
    USER_ID,
    USER_NAME,
    Email,
    Prefecture,
    Status
FROM Users;

結果が表示されれば、SSMSからLocalDBへSQLを実行できています。

C#.NETからSQLコマンドを実行する

次に、Visual StudioのC#からLocalDBへ接続します。

C#からSQL Serverへ接続するには、Microsoft.Data.SqlClient を使います。

Microsoft.Data.SqlClient は、SQL ServerおよびAzure SQL向けの公式.NETデータプロバイダーです。NuGet Galleryでも、SQL ServerとAzure SQL databases向けの公式.NET data providerとして説明されています。

Visual Studioを準備する

まず、Visual Studioをインストールします。
Visual Studioのインストールページはこちらから。
※Visual Studioのバージョン等には気を付けてください。

インストールが終われば、「新しいプロジェクトの作成」を選択。

今回は「Windowsフォームアプリ」を選択し、「次へ」を選択。

ここまでできたら、プロジェクト名・保存場所を設定してプロジェクトを作成する。

Microsoft.Data.SqlClientを追加する

プロジェクト作成後、NuGetで Microsoft.Data.SqlClient を追加します。

Visual Studioから追加する方法

  1. プロジェクトを右クリック
  2. 「NuGet パッケージの管理」を選択
  3. 「参照」タブを開く
  4. Microsoft.Data.SqlClient を検索
  5. インストールする

C#.NETからLocalDBへ接続する

Form1.cs を以下のように書きます。

LocalDBでは、基本的にWindows認証を使うため、ユーザー名やパスワードを指定しなくても接続できます。
※Formのラベル、ボタン等は先に作成の方をお願いします。

using Microsoft.Data.SqlClient;

namespace SQL_Server_Test
{
    public partial class Form1 : Form
    {
        // Server:LocalDBの接続先
        // Database:使用するデータベース
        // Integrated Security:Windows認証で接続
        // TrustServerCertificate:ローカル開発用に証明書を信頼
        private string connectionString =
                @"Server=(localdb)\MSSQLLocalDB;" +
                "Database=SampleDb;" +
                "Integrated Security=True;" +
                "TrustServerCertificate=True;";

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ConnectTest();
        }

        private void ConnectTest()
        {
            using (SqlConnection connection = new SqlConnection(connectionString))

                try
                {
                    connection.Open();
                    label2.Text = "LocalDBに接続しました。";
                }
                catch (Exception ex)
                {
                    label2.Text = "接続エラーが発生しました。";
                    Console.WriteLine(ex.Message);
                }
        }
    }
}

実行して、以下のような結果になると成功です。

C#.NETからSQLコマンドを実行する

先ほどのFormにボタンの追加とDataGridViewを配置し、以下のソースコードで実行する。

using Microsoft.Data.SqlClient;
using System.Data;

namespace SQL_Server_Test
{
    public partial class Form1 : Form
    {
        // Server:LocalDBの接続先
        // Database:使用するデータベース
        // Integrated Security:Windows認証で接続
        // TrustServerCertificate:ローカル開発用に証明書を信頼
        private string connectionString =
                @"Server=(localdb)\MSSQLLocalDB;" +
                "Database=SampleDb;" +
                "Integrated Security=True;" +
                "TrustServerCertificate=True;";

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ConnectTest();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string sql = @"SELECT user_id,user_name,email,prefecture,signup_date,status FROM dbo.users;";
            SelectTest(sql);
        }

        private void ConnectTest()
        {
            using (SqlConnection connection = new SqlConnection(connectionString))

                try
                {
                    connection.Open();
                    label2.Text = "LocalDBに接続しました。";
                }
                catch (Exception ex)
                {
                    label2.Text = "接続エラーが発生しました。";
                    Console.WriteLine(ex.Message);
                }
        }

        private void SelectTest(string sql)
        {
            try
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                using (SqlCommand command = new SqlCommand(sql, connection))
                using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                {
                    DataTable table = new DataTable();

                    adapter.Fill(table);

                    dataGridView1.DataSource = table;
                }

                label2.Text = "データを取得しました。";
            }
            catch (Exception ex)
            {
                label2.Text = "データ取得エラーが発生しました。";

                MessageBox.Show(
                    ex.Message,
                    "エラー",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error
                );
            }
        }
    }
}

実行すると以下のようになる。

SSMSとC#の使い分け

SSMSとC#は、役割を分けて使うと理解しやすいです。

SSMSでやること

SSMSでは、主に以下を行います。

  • データベース作成
  • テーブル作成
  • サンプルデータ登録
  • SELECTの動作確認
  • データの中身確認
  • SQLの試し書き

C#でやること

C#では、主に以下を行います。

  • アプリからDBへ接続
  • SELECT結果を画面やコンソールに表示
  • ユーザー入力を条件にして検索
  • INSERT / UPDATE / DELETEを実行
  • WinFormsやWPFと連携

最初は、SSMSでSQLが正しく動くことを確認してから、C#に移す のがおすすめです。

まとめ

今回は、SQL Server Express本体ではなく、SQL Server LocalDB を使ってC#.NETの開発環境を準備する方法を解説しました。

まずはSSMSでSQLが動くことを確認し、その後にC#から同じSQLを実行する流れで進めると、SQL ServerとC#.NETの連携を理解しやすくなります。