SQL Server 2005 Express の AttachDBFilename/User Instance を利用した開発について
- SQL Server 2005 Express の設定
- インストール時に User Instance の設定を有効にしていない場合、sqlcmd や SQL Server Management Studio Express から設定変更コマンドを実行する
C:\>sqlcmd -E -S .\SQLEXPRESS
1>sp_configure 'show advanced options', 1;
2>GO
1>RECONFIGURE;
2>GO
1>sp_configure 'user instances enabled','1'
2>GO
1>RECONFIGURE;
2>GO
- 名前付きパイプを有効にする
- SQL Server Configuration Manager の「SQL Server 2005 ネットワークの構成」→「SQLEXPRESS のプロトコル」→「名前付きパイプ」を有効化

- データベースファイルの作成
- sqlcmd で、データベースを作成し、デタッチ(切り離し)を行う
C:\>sqlcmd -E -S .\SQLEXPRESS
1>CREATE DATABASE SampleDB
2>GO
1>sp_detach_db 'SampleDB'
2>GO
- Visual Studio 2005 でプロジェクトの作成
- Windows アプリケーション
- ソリューション エクスプローラよりプロジェクトを右クリックし、「追加」→「既定の項目」を選択
- サーバ エクスプローラ に「SampleDB.mdf」が追加される(ウィザードが起動されるがこの場合、キャンセル)
- 「SampleDB.mdf」を右クリックし、「接続の変更」を選択し、「接続の確認」をクリック
- これで、データベースアプリケーションの開発が可能になるが、MDF ファイルのプロパティで「出力ディレクトリにコピー」を「常にコピー」とするとデバッグを開始するたびに、MDF ファイルがコピーされるので、データベースは初期化されてしまうので、「新しい場合はコピーする」か「コピーしない」にしておくこと

- 「コピーしない」にすると例外が発生するため、手動で bin\Debug/bin\Release フォルダ MDF ファイルをコピーしておく必要があるので、「新しい場合はコピーする」を選択するほうが無難

- Web アプリケーション
- aspnetdb
- Web サイト管理ツールから設定を行うデータベース(パーソナル Web サイト スタータ キットやログイン関連のコントロールで利用されるデータベース)は %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe を使って、aspnetdb を作成する
C:\>sqlcmd -E -S .\SQLEXPRESS
1>sp_detach_db 'aspnetdb'
2>GO
- aspnetdb.mdf/aspnetdb_Log.LDF をどこかに移動しておく
- 通常、C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data 配下にファイルが生成される
- 空の Web アプリケーションの作成

App_Data を右クリックし、「既存項目の追加」をクリック

このとき App_Data は NTFS 圧縮されていないこと、Web アプリケーションを HTTP で作成した場合は、App_Data フォルダに %COMPUTERNAME%\ASPNET ユーザに書き込み、変更権限を付与すること

ソリューション エクスプローラ の Web アプリケーションを右クリックし、「新しい項目の追加」をクリック

「Web 構成ファイル」を選択して、「追加」ボタンをクリック

- ユーザデータベース
- 事前に sqlcmd/SSEUtil.exe で、データベースを作成する
- Web アプリケーションの「App_Data」に作成した MDF を追加する
- テーブルやストアドプロシージャ作成、データ追加はサーバ エクスプローラから行う

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

- ASP.NET/Windows アプリケーションともに発生するので、上図は一例
- このエラーは「リモートデスクトップ」などで、リモートの Windows XP Service Pack 2/Windows Server 2003 Service Pack 1 に接続して、その OS 上で開発を行うと必ず発生する
- You cannot connect to Visual Studio SQL Server Express on a remote Windows XP Service Pack 2-based computer
http://support.microsoft.com/kb/896613
この KB にはリモートコンピュータが Windows XP Service Pack 2 の場合に発生するとありますが、Windows Server 2003 R2 でも発生することが確認できました。
Windows XP Service Pack 2 の場合はホットフィックスがあるので、何とかなりそうですが、Windows Server 2003 Service Pack 1 の場合は別途サポートに問い合わせてホットフィックスの提供を求めるか、リモートでの開発を諦めてコンソールで開発か Windows XP などのクライアント OS で開発するしかありません。
-
ユーザー インスタンスを使用する場合の制限
ユーザー インスタンスを使用する場合、SQL Server Express の一部の機能が通常どおりに機能しなくなる場合があります。たとえば、次のような制限があります。
- 1 人のユーザーが使用できるユーザー インスタンスは 1 つだけです。
- レプリケーションが無効になります。
- ユーザー インスタンスでは SQL Server 認証はサポートされません。Windows 認証のみがサポートされます。
- ユーザー インスタンスをサポートするネットワーク プロトコルは、ローカルの名前付きパイプだけです。
- ユーザー インスタンスは、親インスタンスのレジストリ エントリを共有します。
- ユーザー インスタンスは、ネイティブ コードではサポートされません。この機能は、ADO .NET でのみサポートされます。
- 動的に生成されたユーザー インスタンスでは、サーバー イベントの WMI プロバイダはサポートされません。親の SQL Server Express インスタンスでは引き続き機能するはずです。WMI プロバイダの詳細については、SQL Server 2005 Books Online の「 サーバー イベントの WMI プロバイダ」を参照してください。
2006/01/10 初版
2006/01/11 改定 User Instance のエラーについての記述の追加