﻿# 如何在 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.](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/26579df2f1f93f453e67-image_3.png "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](http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) 找出修改 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](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a05618330903d98a1eaf-image_5.png "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](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/eff7b037e948eff9e1aa-image_8.png "找到 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](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/9c5b4126d993d6cac0c3-image_thumb_2.png "image")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6e597a17a9bc498e867f-image_10.png)

**相關連結**

-   [Microsoft SQL Server: SQL Server 2005 Compact 版本](https://www.microsoft.com/en-us/download/details.aspx?id=10070)
-   [SQL Server Compact - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/SQL_Server_Compact)
-   [SQL Server Compact Edition 線上叢書首頁](http://msdn.microsoft.com/zh-tw/library/ms173053\(SQL.90\).aspx)
-   [SQL Server Compact 3.5 線上叢書](http://msdn.microsoft.com/zh-tw/library/bb734673.aspx) ( 較新版 )
    -   [下載 Microsoft SQL Server Compact 3.5 Service Pack 1 線上叢書和範例](https://web.archive.org/web/20101121134151/http://www.microsoft.com/downloads/details.aspx?FamilyID=07829770-73a7-41e4-880d-e74b1a353623&displaylang=zh-tw)
    -   [部署考量因素](http://msdn.microsoft.com/zh-tw/library/ms174612.aspx) ( [Deployment Considerations](http://msdn.microsoft.com/en-us/library/ms174612.aspx) )
-   [SQL Server Compact Team Blog](http://blogs.msdn.com/sqlservercompact/)
