Visual Studio 2022 で「Service-based SQL Database(.mdf)」を追加しようとしたらエラーになり、NuGet で Microsoft.Data.SqlClient や System.Data.SqlClient を入れても直らない……というケースは少なくありません。この記事では、原因の考え方から Visual Studio の具体的な修復手順、LocalDB の確認方法、そして .mdf に依存しない構成の考え方まで、実務でそのまま使えるレベルで整理します。
Visual Studio 2022で「Service-based SQL Database(.mdf)」が作成できない現象
まずは、どのような現象が「Service-based Database が作成できない」状態なのかを整理しておきます。
- プロジェクトを右クリック → [追加] → [新しい項目] から [Service-based Database] を選ぶとエラーになる
- 「Service-based Database」のテンプレート自体が「新しい項目」の一覧に出てこない
- .mdf は作成されるが、サーバーエクスプローラーや実行時の接続でエラーになる
代表的な症状と、よく関係する原因をざっくり対比すると次のようになります。
| 症状 | 可能性が高い原因 |
|---|---|
| 「Service-based Database」を追加すると即座にエラー | Visual Studio のワークロード不足・破損、テンプレートの不整合 |
| 「Service-based Database」の項目が一覧に存在しない | 「データの保存と処理」ワークロード未インストール、プロジェクト種別が対象外 |
| .mdf はあるが接続時にエラーになる | SQL Server Express LocalDB(MSSQLLocalDB)がインストールされていない/起動していない |
多くの人が最初に試すのが「SQL クライアントの NuGet パッケージを入れる」ことですが、これは アプリケーション実行時の接続ライブラリ であり、Visual Studio が .mdf をテンプレートから生成する「デザイン時」機能とはまったく別物です。そのため、NuGet だけでは状況は改善しません。
原因の整理:問題はNuGetではなくVisual Studio側のコンポーネント
Visual Studio 2022 で .mdf のテンプレートがエラーになる根本原因は、ほぼ次のどれかに集約できます。
- インストール時に 「データの保存と処理」ワークロード を入れていない
- SQL 関連コンポーネントやテンプレートが OS 更新・アップデートの影響で破損している
- Visual Studio 自体の設定・キャッシュが壊れている
- 前提となる SQL Server Express LocalDB がない、または動作していない
逆に言えば、NuGet の Microsoft.Data.SqlClient / System.Data.SqlClient が入っているかどうかは、このテンプレートの成功/失敗にはほぼ関係ありません。
Visual Studio が Service-based Database を作成するときは:
- プロジェクト内に .mdf ファイルを作成する
- LocalDB(
MSSQLLocalDBインスタンスが標準)に対して、その .mdf をアタッチする - 必要であれば接続文字列を設定ファイルに追記する
この処理は Visual Studio 本体と SQL Server Express LocalDB によって行われるため、プロジェクトが参照している NuGet パッケージは関係しません。「テンプレートのエラー=開発環境側の問題」と考えるのが正しい切り分けです。
解決までの標準ルート:上から順に実施する
ここからは、再現しやすく失敗しにくい順に、具体的な対処手順を解説します。大きく次のステップで進めると効率的です。
| 優先順位 | 対処内容 | 主な目的 |
|---|---|---|
| A | ワークロード「データの保存と処理」の導入・入れ直し | 必要なツール・テンプレートを揃える |
| B | Visual Studio の修復 / 更新 / 設定初期化 | 破損した設定や古いバージョンを是正 |
| C | プロジェクト側のキャッシュと生成物のクリーンアップ | プロジェクト固有の不整合を解消 |
| D | SQL Server Express LocalDB の状態確認 | 実際に .mdf をホストするエンジンの確認 |
| E | 最終手段として Visual Studio の再インストール | 環境をまっさらな状態に戻す |
A. 「データの保存と処理」ワークロードと .NET SDK を入れ直す
最初に確認すべきは、Visual Studio 自体に必要なコンポーネントが入っているかどうかです。
Visual Studio Installerでワークロードを確認
- Windows のスタートメニューから 「Visual Studio インストーラー」 を起動します。
- 対象の Visual Studio 2022 の横にある [変更](Modify) をクリックします。
- [ワークロード] タブを開き、「データの保存と処理(Data storage and processing)」 にチェックが入っているか確認します。
- チェックが外れていればオンにして [変更] または [インストール] を実行します。
ワークロード画面に見つからない場合は、「その他のツール セット」や「データ関連」のカテゴリをよく探してください。コミュニティ版・Professional・Enterprise などエディションによって表示位置の違いがあることもあります。
個別コンポーネントでSQL関連を確認
念のため、[個別のコンポーネント] タブで以下のような項目がインストールされているか確認すると安心です(名称はバージョンにより多少異なります)。
| 場所 | 代表的なコンポーネント | 役割 |
|---|---|---|
| 個別コンポーネント > データストレージ | SQL Server Express LocalDB | Service-based Database が接続する軽量 SQL Server |
| 個別コンポーネント > データストレージ | SQL Server Data Tools など | データベース関連のデザイン・ビルド支援 |
.NET 8 SDK / ランタイムの有無を確認
対象プロジェクトが .NET 8 をターゲットにしている場合は、.NET 8 SDK とランタイムのインストールも確認します。Visual Studio インストーラーの「個別コンポーネント」で .NET 8 関連の項目にチェックを入れるか、別途 .NET 8 SDK をインストールしておきましょう。
.NET SDK の有無は .mdf テンプレートそのものより、プロジェクトのビルドやツール連携に影響します。「VS 本体」「データワークロード」「ターゲット .NET の SDK」をセットで揃えるイメージを持つとトラブルが減ります。
B. Visual Studio の修復・更新・設定初期化
ワークロードの入れ直しで改善しない場合は、次に Visual Studio 自体を整えます。
Visual Studioの修復(Repair)
- Visual Studio をすべて終了します。
- 再度 Visual Studio インストーラー を起動します。
- 対象の Visual Studio 2022 の右にある [その他] メニューから [修復] を選択します。
- ガイドに従って修復処理を完了させます。
修復では、壊れている可能性のあるテンプレートや内部コンポーネントも再配置されるため、「テンプレートを選んだ瞬間に落ちる」といった挙動が改善することがあります。
Visual Studioを最新バージョンに更新
修復が完了したら、同じインストーラー画面から [更新] を実行し、Visual Studio 2022 を最新の状態にしておきましょう。SQL 関連機能を含む不具合が修正されているケースもあり、思わぬところで効果を発揮します。
設定の初期化(devenv /ResetSettings)
設定ファイルの破損や古いアドインの影響でテンプレートが正しく動いていない可能性もあります。そこで Visual Studio の設定を一度リセットしてみます。
- 「開発者コマンド プロンプト for VS 2022」 を起動します。
- 次のコマンドを実行します。
devenv /ResetSettings
このコマンドを実行すると、ウィンドウレイアウトや一部のユーザー設定が初期状態に戻ります。カスタマイズを多用している場合は、事前に「ツール → 設定のインポートとエクスポート」からバックアップを取っておくと安心です。
新規プロジェクトでService-based Databaseを試す
ここまで対応したら、既存プロジェクトの問題かどうか切り分けるために、まっさらなテスト用プロジェクトを作成して試します。
- Visual Studio 2022 で [ファイル] → [新規作成] → [プロジェクト] を開く。
- 「Windows フォーム アプリ」など、Windows デスクトップ系のテンプレートを選ぶ(.NET Framework ベースだと試しやすい)。
- プロジェクト作成後、プロジェクトを右クリック → [追加] → [新しい項目]。
- 「データ」カテゴリ(または「データ」系のテンプレート)から [Service-based Database] を選択して追加を試す。
新規プロジェクトでは正常に .mdf が作れる場合、元のプロジェクト特有の設定やファイルが壊れている可能性が高くなります。この場合は次の「キャッシュ削除」もあわせて行うことで改善することが多いです。
C. キャッシュと生成物をクリーンアップする
Visual Studio はプロジェクトごとにさまざまなキャッシュや一時ファイルを持っており、それが壊れているとテンプレート追加時にも影響することがあります。
bin / obj / .vsフォルダーの削除
- Visual Studio を終了します。
- エクスプローラーでソリューションフォルダーを開きます。
- ソリューション直下にある bin フォルダー、obj フォルダー、.vs フォルダー(隠しフォルダー)を削除します。
- Visual Studio でソリューションを開き直し、クリーン → 再ビルド を行います。
- 再度、「新しい項目」から Service-based Database の追加を試します。
.vs フォルダーはソリューション単位のキャッシュ・一時設定を多く持っています。削除してもコードそのものは消えないので、「動きがおかしいときはいったん削除して再生成」が定番の対処です。
NuGetキャッシュのクリア
Service-based Database のテンプレート自体には直接関係しないものの、依存関係まわりのトラブルを避ける目的で、NuGet キャッシュをクリアするのも一案です。
- Visual Studio の ツール → NuGet パッケージ マネージャー → パッケージ マネージャーの設定 を開く
- NuGet のキャッシュ に関する項目から 「すべてのキャッシュをクリア」 を実行する
.NET CLI が使える環境であれば、コマンドラインから次のようにクリアすることもできます。
dotnet nuget locals all --clear
これにより、古いパッケージキャッシュが原因のビルドエラーや設計時の不具合を避けやすくなります。
D. SQL Server Express LocalDBの状態を確認する
Service-based Database(.mdf)は多くの場合、SQL Server Express LocalDB によってホストされます。LocalDB がインストールされていない・起動していない場合、.mdf の作成や接続時にエラーが発生します。
LocalDBのインストール有無を確認
- 「開発者コマンド プロンプト for VS 2022」または通常のコマンドプロンプトを起動します。
- 次のコマンドを実行します。
sqllocaldb info
ここで次のようなパターンが考えられます。
| 出力結果 | 状況 | 対応 |
|---|---|---|
| LocalDB インスタンス名(例:MSSQLLocalDB)が一覧表示される | LocalDB はインストール済み | 次の「インスタンス起動確認」へ |
'sqllocaldb' は内部コマンドまたは外部コマンド… | LocalDB 自体がインストールされていない可能性 | Visual Studio インストーラーで「SQL Server Express LocalDB」を追加インストール |
| 一覧は出るが、目的のインスタンスが存在しない | 標準インスタンスが作成されていない | 新規にインスタンスを作成 |
MSSQLLocalDBインスタンスの作成・起動
標準インスタンス MSSQLLocalDB が存在しない場合、次のコマンドで作成・起動できます。
sqllocaldb create "MSSQLLocalDB"
sqllocaldb start "MSSQLLocalDB"
状態を確認するには:
sqllocaldb info "MSSQLLocalDB"
ここで「状態: 実行中」のような表示になっていれば LocalDB 自体は動いていると判断できます。
接続文字列のイメージ
Service-based Database として作成された .mdf に対する接続文字列は、おおよそ次のような形になります。
Data Source=(LocalDB)\MSSQLLocalDB;
AttachDbFilename=|DataDirectory|\Database1.mdf;
Integrated Security=True;
「サーバー名」に (LocalDB)\MSSQLLocalDB を指定して接続できるかを SQL Server オブジェクト エクスプローラーなどで確認しておくと、LocalDB 周りのトラブルかどうかの切り分けがしやすくなります。
E. それでもダメな場合は Visual Studio の再インストールを検討
ここまでの A〜D を実施してもなお、「Service-based Database 追加時に必ずエラーになる」「テンプレートが壊れているようにしか見えない」といった状況であれば、最終手段として Visual Studio 2022 の再インストール を検討します。
- Visual Studio で ツール → 設定のインポートとエクスポート から現在の設定をエクスポートしておく。
- Visual Studio インストーラーから対象インスタンスをアンインストール。
- PC を再起動。
- 最新版の Visual Studio 2022 をインストールし、最初から 「データの保存と処理」ワークロード と LocalDB をチェックしてセットアップ。
手間はかかりますが、原因不明なテンプレートまわりの不具合は、クリーンインストールで一気に解決することも少なくありません。複数バージョンの Visual Studio を並行インストールしている環境などでは特に効果的です。
LocalDBとService-based Databaseの関係を理解する
ここで一度、Service-based SQL Database(.mdf)と LocalDB の関係を整理しておきます。
- Service-based Database は、プロジェクトに埋め込まれた .mdf ファイル
- 実際のデータベースエンジンは SQL Server Express LocalDB
- Visual Studio は LocalDB に対して .mdf をアタッチ/デタッチしながら設計・実行を行う
この構成の特徴は次の通りです。
| 項目 | Service-based Database(.mdf) |
|---|---|
| 配置場所 | 通常はプロジェクトフォルダー直下、または App_Data 配下 |
| 実行エンジン | ローカルの SQL Server Express LocalDB(MSSQLLocalDB など) |
| メリット | プロジェクト内に完結するため、配布が簡単・開発環境構築が楽 |
| デメリット | 複数PC間での共有・マイグレーションが難しい、Gitなどでのバージョン管理と相性が悪い |
このように、Service-based Database は「簡易にローカルで完結させる」用途には向いている一方、チーム開発や本番運用を考えると制約も多くなります。そのため、Visual Studio 2022 以降では、外部の SQL Server(LocalDB / Express / 開発用サーバー)へ通常接続するスタイルを選ぶケースが増えています。
よくある勘違いとベストプラクティス
最後に、Service-based Database 周りでよくある勘違いと、よりメンテナンスしやすい構成の考え方を整理します。
勘違い1:NuGetのSqlClientを入れればテンプレートのエラーが直る
冒頭でも触れましたが、これは典型的な誤解です。
- NuGet の SqlClient(
Microsoft.Data.SqlClient/System.Data.SqlClient)- アプリケーションが実行時に SQL Server へ接続するためのライブラリ
- Visual Studio のテンプレートやウィザードの動作とは直接関係しない
- Service-based Database のテンプレート
- Visual Studio が提供する「プロジェクトに .mdf を追加する」ためのデザイン時機能
- 必要なのは VS のワークロード・テンプレート・LocalDB
したがって、テンプレートエラーが出ている段階では、まずは VS 側の環境を整えることが最優先です。NuGet は、テンプレートが正常に動くようになってから、アプリの構成に合わせて追加すれば十分です。
勘違い2:どのプロジェクトでもService-based Databaseを使うべき
Visual Studio 2022 では、プロジェクトの種類によっては Service-based Database テンプレートが表示されなかったり、そもそも推奨されていなかったりします。特に、.NET 5 以降の SDK スタイル プロジェクトでは、よりモダンなデータアクセス手法(たとえば Entity Framework Core など)が前提になるケースが多くなっています。
用途ごとのおすすめ構成を簡単にまとめると次の通りです。
| 用途 | おすすめの構成 | 備考 |
|---|---|---|
| 学習用・小規模な試作 | Service-based Database(.mdf) + LocalDB | セットアップが簡単で完結しやすい |
| チーム開発・業務アプリ | 共有 SQL Server / SQL Server Express + 通常の接続文字列 | .mdf ではなくサーバー側で DB を管理する方が運用しやすい |
| .NET 5 以降の新規開発 | Entity Framework Core + LocalDB/SQL Server | コードファーストやマイグレーションを活用しやすい |
Service-based Database が動かないことをきっかけに、外部 DB サーバーに接続する構成へ切り替えるのも長期的には有力な選択肢です。
勘違い3:テンプレートが表示されない=Visual Studioのバグ
テンプレートが一覧に出てこない場合、つい「バグでは?」と感じてしまいますが、実際には次の要因であることが多いです。
- 「データの保存と処理」ワークロードをインストールしていない
- 選択しているプロジェクトの種類が Service-based Database に対応していない
- Visual Studio のフィルタリング(上部の検索ボックスやカテゴリ)が効いている
まずはこの記事の手順に沿って、ワークロードの導入 → 修復 → 新規プロジェクトでの確認を行い、それでも出てこない場合に「バグの可能性」を疑う、くらいの順序で考えるのがおすすめです。
最短で復旧するための具体的チェックリスト
最後に、ここまでの内容を「そのまま上からこなすだけ」で確認できるチェックリストとして整理します。
| 順番 | チェック項目 | ポイント |
|---|---|---|
| 1 | Visual Studio インストーラーで「データの保存と処理」ワークロードにチェックが入っている | 足りていなければ追加インストールする |
| 2 | 個別コンポーネントで SQL Server Express LocalDB がインストールされている | なければ追加インストールする |
| 3 | Visual Studio の修復(Repair)と最新バージョンへの更新を実施した | テンプレート・内部コンポーネントの破損を解消 |
| 4 | devenv /ResetSettings を実行して設定を初期化した | レイアウトや設定が原因の不具合をリセット |
| 5 | テスト用の新規プロジェクトで Service-based Database を追加してみた | 既存プロジェクト固有の問題かどうかを切り分け |
| 6 | 問題のプロジェクトで bin / obj / .vs を削除し、再ビルドした | キャッシュ・一時ファイルの影響を排除 |
| 7 | sqllocaldb info で LocalDB の状態を確認し、必要なら MSSQLLocalDB を作成・起動した | 実際に .mdf をホストするエンジンの存在を確認 |
| 8 | それでも解決しない場合は Visual Studio 2022 を再インストールした | 設定バックアップを事前に取ることを忘れない |
実務的には、1〜3 だけで解決するケースがかなり多く、LocalDB の確認まで含めれば大半の「Service-based Database が作れない」問題は片付きます。それでも残る場合は、「そもそも .mdf テンプレートにこだわるべきか?」を見直し、外部 SQL Server への接続や EF Core などを検討するのも良いタイミングです。
まとめると、次の順番で試すのがもっとも効率的です。
- ワークロード「データの保存と処理」の導入・入れ直し
- Visual Studio の修復と更新
- bin / obj / .vs 削除 + 設定のリセット
- 新規プロジェクトでの再試行
- LocalDB(MSSQLLocalDB)の確認・起動
- 必要であれば Visual Studio の再インストール
この流れで環境と前提を整えていけば、「Visual Studio 2022 で Service-based SQL Database(.mdf)が作成できない」という問題は、ほとんどのケースで解決できるはずです。

コメント