App_Dataフォルダにデータベースを作成できませんの対処

ASP.NET MVC の プロバイダー データベースの自動作成の落とし穴
http://www.moonmile.net/blog/archives/980

の顛末について、書いておきます。

現象としては、

  • Visual Studio 2010 で作った、ASP.NET MVC のプロジェクトで、ログインしようとするエラーが発生する。

です。

エラーメッセージは、

ユーザー インスタンスのプロセスを起動中のエラーにより、SQL Server のユーザー インスタンスを生成できませんでした。接続は閉じられます。

ですね。

環境は、

  • Windows 7 Ultimate
  • Visual Studio 2010 Professional
  • SQL Server 2008 R2 Express Edition 

ですが、バージョンはあまり関係ありません。「SQL Server 2008 Express Edition」のところしか関係ありません。

ちなみに、上記の環境で ASP.NET MVC アプリを作成して、ログインをすると「ログイン」できます。なので、普通にやっている分には問題ありません。

■現象

問題は、次の手順をやってしまったときです。

  1. Visual Studio 2010 をインストールする。
  2. SQL Server 2008 Express Edition が同時にインストールされる。
  3. SQL Server 2008 R2 を入れようとして、一旦、SQL Server 2008 Express Edition をアンインストールする。
  4. SQL Server 2008 R2 Express Edition をインストールする。

のように、SQL Server の Express Edition を「アンインストール」→「再びインストール」したときに発生します。

このログインできない現象は、ASP.NET MVC に限りません。

  • ASP.NET のログインコントロールを使った場合
  • ローカルデータベースファイルを ADO.NET でオープンしようとした場合
  • サーバーエクスプローラーで、ローカルデータベースファイルを追加しようとした場合

でも発生します。

■対処

先に対処方法を書いておきます。

Windows Vista/7 の場合は

C:\Users\ユーザ名\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS\ のフォルダを「削除」して下さい。

Windows XP の場合は、Documents and Settings の中です。

ここの中にある各ファイルが邪魔をしています。

■原因

主原因は、SQLEXPRESS\ の中にある、master.mdf などのシステムファイルが、インストール前後で不整合を起こしているためです。このため、ASP.NET のログインコントロールからアクセスしようとしたときに、前後の不整合のために、「インスタンスが生成できません」というエラーになります。

これが発生してしまうのは、SQL Server 2008 Express Edition(2005も同様)をアンインストールしたときに、該当するユーザー領域のデータ(SQLEXPRESS\配下のファイル等)を削除しないためです。
ユーザー領域なので、おそらく、別ユーザーでログインしたときはつながる、という見かけ上、不思議な現象になります。

■情報源

Google で「Microsoft SQL Server Data SQLEXPRESS AppData」で検索すると、いくつかの質問がヒットします。

App_Dataフォルダにデータベースを作成できません
http://social.msdn.microsoft.com/Forums/ja-JP/vwdexpressja/thread/13919e51-b9f9-4ab4-8ef7-92dce872851b

公式なところでは、

SQL Server Express ユーザー インスタンスへの接続 (ADO.NET)
http://msdn.microsoft.com/ja-jp/library/ms254504.aspx

管理者以外のユーザーのためのユーザー インスタンス
http://msdn.microsoft.com/ja-jp/library/ms143684.aspx

を読むと、上記のフォルダ「C:\Users\ユーザ名\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS\」が関係していることが分かります。

 

カテゴリー: 開発 パーマリンク