【SQL】C#.NETでSQL Server LocalDBを使う方法|SSMS接続からSQL実行まで解説
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.SqlClient | C#から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 Express | SQL Server LocalDB |
|---|---|---|
| 用途 | 小規模アプリ・ローカルサーバー | 開発・学習・ローカル検証 |
| 動作 | サービスとして常駐しやすい | 必要時に起動する軽量インスタンス |
| 管理 | やや必要 | 少なめ |
| 初心者向け | 少し設定が多い | 比較的扱いやすい |
| C#学習 | 使える | とても使いやすい |
| 本番運用 | 小規模なら可能 | 基本的に開発向け |
今回の記事では、C#.NETからSQLを試すこと が目的なので、LocalDBを使います。
SQL Server LocalDBを準備する
LocalDBは、Visual Studioをインストールした環境に入っている場合があります。
まず、コマンドプロンプトまたはPowerShellで以下を実行します。
sqllocaldb info以下のように「MSSQLLocalDB」が表示されれば、LocalDBが使えます。

詳細を確認する場合は、以下を実行します。
sqllocaldb info MSSQLLocalDBSQL 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_id | user_name | prefecture | status |
|---|---|---|---|
| 1 | Aki | Tokyo | active |
| 2 | Bora | Osaka | active |
| 3 | Chin | Tokyo | inactive |
| 4 | Dai | Fukuoka | active |
| 5 | Ema | Hokkaido | active |
テーブル:products
| product_id | product_name | price | active |
|---|---|---|---|
| 1 | Laptop | 120000 | 1 |
| 2 | Headphones | 15000 | 1 |
| 3 | Mouse | 3000 | 1 |
| 4 | Novel | 1800 | 1 |
| 5 | Keyboard | 8000 | 0 |
テーブル:orders
| order_id | user_id | order_date | status | coupon_code |
|---|---|---|---|---|
| 1001 | 1 | 2025-04-01 | paid | SPRING10 |
| 1002 | 1 | 2025-04-15 | shipped | NULL |
| 1003 | 2 | 2025-04-03 | paid | NULL |
| 1004 | 2 | 2025-04-20 | cancelled | NULL |
| 1005 | 4 | 2025-04-25 | paid | VIP |
テーブル:order_items
| order_item_id | order_id | product_id | quantity | unit_price |
|---|---|---|---|---|
| 1 | 1001 | 1 | 1 | 120000 |
| 2 | 1001 | 3 | 2 | 3000 |
| 3 | 1002 | 2 | 1 | 15000 |
| 4 | 1002 | 4 | 3 | 1800 |
| 5 | 1003 | 2 | 2 | 15000 |
| 6 | 1003 | 3 | 1 | 3000 |
| 7 | 1004 | 5 | 1 | 8000 |
| 8 | 1005 | 1 | 1 | 120000 |
| 9 | 1005 | 2 | 1 | 15000 |
| 10 | 1005 | 3 | 1 | 3000 |
以下が作成クエリです。
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から追加する方法
- プロジェクトを右クリック
- 「NuGet パッケージの管理」を選択
- 「参照」タブを開く
- Microsoft.Data.SqlClient を検索
- インストールする

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の連携を理解しやすくなります。

サイトアイコン-2-150x150.png)