The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 ASP.NET 專案中使用 SQL Server Compact 資料庫

最近在研究 SQL Server Compact ( 或稱 SQL CE ) 資料庫,也順帶研究如何才能讓 SQL CE 資料庫可以在 ASP.NET 環境中正常使用,由於 SQL CE 資料庫在定位上是比較屬於嵌入式資料庫( Embeded Database ),雖然在桌面環境也能使用,不過也僅建議用在「單人操作」的系統中,像對於 ASP.NET 這種多人同時使用的 Web 環境預設就不支援了。

如果你硬要將 SQL CE 資料庫 ( *.sdf ) 加入到 Visual Studio 專案中,其實也是可以正常開發,不過在執行的時候就會出現以下錯誤:

SQL Server Compact is not intended for ASP.NET development.

如果你一定要用的話,可以在 HttpApplication 的 Application_Start 事件 ( 在 Global.asax 中 ) 加入以下程式碼,即可讓 ASP.NET 支援 SQL Server Compact 資料庫運作:

AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);

另外,因為 ASP.NET 預設不支援 SQL Server Compact 資料庫,所以當然在 Visual Studio 中也無法透過 Add New Item 的方式加入 "Local Database" 到專案中 ( 加入到 App_Data 目錄 ),我這次也是花了好幾個小時透過 Process Monitor 找出修改 Visual Studio 的方法,讓 Visual Studio 在 App_Data 目錄使用 Add New Item 的方式加入專案項目時,可以看見 "Local Database" 這個 Project Item,而 "Local Database" 就是 SQL Server Compact 資料庫在 Visual Studio 中的專案項目名稱。

如果修改成功,你就可以看到以下畫面:

Visual Studio 在 App_Data 目錄使用 Add New Item 的方式加入專案項目時,看見 "Local Database" 這個 Project Item

修改的步驟如下 (我是用 Visual Studio 2008 英文版,不過中文版的改法應該是一樣的):

  1. 先開啟 regedit 並找到以下機碼 ( 建議先匯出備份此機碼,否則要是不小心改壞或誤刪就麻煩了 )
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Packages\{349C5850-65DF-11DA-9384-00065B846F21}\AddNewItemFilters
  2. 接著找到該機碼下的一個 ExcludedTemplates 子機碼,找到 EmptyDatabase2.vstemplate 這一項,並按下 F2 改名成 EmptyDatabase2.vstemplate-bak 即可。
    找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Packages\{349C5850-65DF-11DA-9384-00065B846F21}\AddNewItemFilters\ExcludedTemplates 機碼,找到 EmptyDatabase2.vstemplate 這一項,並按下 F2 改名成 EmptyDatabase2.vstemplate-bak
  3. 然後再找到 App_Data 這個子機碼,並新增一個 DWORD  (32-位元) 值 並命名為 EmptyDatabase2.vstemplate 即可。
    image

相關連結