使用 SQL Server Express Edition 搭配 ASP.NET
更新:2007 年 11 月
Microsoft SQL Server 2005 Express Edition 提供可建置應用程式的簡單資料庫方案。SQL Server Express Edition 支援完整的 SQL Server 2005 程式設計模型,包括 Transact-SQL、預存程序、檢視、觸發程序 (Trigger)、SQL Server CLR 整合 (SQLCLR) 和 XML 資料型別。在將 SQL Server Express Edition 當成資料來源使用以開發應用程式時,您可以確保應用程式將會與執行 SQL Server 2005 的實際執行伺服器 (Production Server) 相容。
連接到 SQL Server Express Edition 資料庫
您可以藉由將資料庫伺服器指定為本機 SQL Server Express Edition 資料來源,連接至 SQL Server Express Edition 資料庫,就像連接至任何 SQL Server 資料庫一樣。例如,下列連接字串會連接至名為 Customers 的資料庫。
Data Source=.\SQLEXPRESS;Initial Catalog=Customers;Integrated Security=True;
您也可以利用 AttachDBFilename 連接字串屬性取代 InitialCatalog 或 Database 連接字串屬性,指定要附加至的資料庫檔案。使用檔案名稱連接至資料庫會簡化利用應用程式部署資料庫的作業 (假設目標伺服器正在執行 SQL Server Express Edition)。例如,下列連接字串會連接至儲存在 Customers.mdf 檔案中的資料庫。
Data Source=.\SQLEXPRESS;AttachDbFileName=e:\data\Customers.mdf;Integrated Security=True;User Instance=True
ASP.NET 提供可在 Web 應用程式的 App_Data 目錄中儲存資料的方便選項。App_Data 目錄的內容並非為了回應 Web 要求而提供的,它會改善您應用程式資料的安全性。因為增加了方便性,您可以提供 |DataDirectory| 連接字串變數取代您應用程式 App_Data 目錄的檔案路徑。在開啟資料庫的連接時,ASP.NET 功能 (例如 SqlDataSource 控制項或成員資格、角色、使用者設定檔、Web 組件個人化等的提供者) 會自動將 App_Data 目錄的檔案路徑取代為 |DataDirectory| 連接字串變數。如此可確保當您的 Web 應用程式移動到不同的目錄時,資料庫的路徑仍能保持在最新的狀態。在下列程式碼範例中,示範了包含 |DataDirectory| 連接字串變數的連接字串:
Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|Customers.mdf;Integrated Security=True;User Instance=True
注意事項: |
---|
當您以 User Instance 設定為 true 的連接字串進行連接時,SQL Server Express Edition 只允許對 .mdf 檔案進行單一連接。 |
在 [方案總管] 中以滑鼠右鍵按一下資料庫,然後選取 [中斷連結] 選項,或在 [伺服器總管] 中以滑鼠右鍵按一下資料庫,然後選取 [關閉連接],便可以關閉由 Visual Web Developer 所進行的連接。當您執行或偵錯 Web 應用程式時,Visual Web Developer 將會自動關閉任何開啟的資料庫連接。
此外,如果您需要釋放任何與 SQL Server Express Edition 資料庫之開啟的連接,可以利用網際網路資訊服務管理員 (IIS 管理員) 卸載 Web 應用程式。您也可以將名為 App_offline.htm 的 HTML 檔加入 Web 應用程式的根目錄,藉此卸載 Web 應用程式。若要允許您的 Web 應用程式再次啟動回應 Web 要求,只要移除 App_offline.htm 檔即可。當您想要複製資料庫或將它移動到新的位置,將必須釋放任何與 SQL Server Express Edition 資料庫之開啟的連接。
設定 SQL Server Express Edition 資料庫
Visual Web Developer 提供工具協助您建立 SQL Server Express Edition 資料庫;管理資料庫項目,如資料表、預存程序等等;以及管理資料庫的連接。您可以透過 [伺服器總管] 視窗存取這些功能。如需建立 SQL Server Express Edition 資料庫的指示,請參閱 HOW TO:建立 SQL Server Express Edition 資料庫。
您也可以連接至執行 SQL Server Express Edition 的電腦並發出 CREATE DATABASE 命令,或使用為 SQL Server Express Edition 提供的 SQL Server 管理工具,藉此建立 SQL Server Express Edition 資料庫。
會在 SQL Server 資料庫中儲存資料之 ASP.NET 功能 (例如,成員資格、角色、使用者設定檔、Web 組件個人化等) 的預設提供者已設定為連接至您應用程式 App_Data 目錄中的 Aspnetdb.mdf SQL Server Express Edition 資料庫。如果您使用預設的提供者啟用上述任何資料儲存功能,而且應用程式的 App_Data 目錄中不存在 Aspnetdb.mdf SQL Server Express Edition 資料庫,則會自動建立資料庫。如果應用程式的 App_Data 目錄不存在,也會自動建立該目錄。
使用者執行個體
SQL Server Express Edition 支援使用者執行個體,這表示它會為每個連接至 SQL Server Express Edition 資料庫的使用者啟動新的處理序。處理序的識別將會是開啟該連接的使用者。如需判斷 ASP.NET 應用程式識別的資訊,請參閱 ASP.NET 模擬。
當您連接至本機資料庫專案時,Visual Web Developer 會連接至依預設已啟用使用者執行個體的 SQL Server Express Edition 資料庫。例如,下列程式碼範例示範了 Visual Web Developer 所使用的標準連接字串,連接至 SQL Server Express Edition 資料庫。
Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|Database.mdf;Integrated Security=True;User Instance=True
雖然啟用使用者執行個體適用於桌上型開發,但啟動背景工作處理序在裝載多重客戶之站台的 Web 伺服器上卻不適用,在該類伺服器上應用程式必須分開並加以保護。利用相同之處理序識別執行的 ASP.NET 應用程式可以連接至相同的使用者執行個體。因為 ASP.NET 應用程式在 Windows 2000 和 Windows XP Professional 上使用相同的處理序識別執行 (預設為本機 ASPNET 帳戶),而相同應用程式集區中的 ASP.NET 應用程式在 Windows Server 2003 上是以相同的處理序識別執行 (預設為 NETWORK SERVICE 帳戶),所以內含彼此相互不信任之應用程式的共用裝載伺服器應該會明確停用使用者執行個體。此功能可以藉由連接至 SQL Server Express Edition 執行個體 (例如,在命令提示字元發出下列命令:osql –E –S .\SQLEXPRESS) 並發出下列 Transact-SQL 命令加以關閉。
EXEC sp_configure 'show advanced option', '1'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'user instances enabled', 0
GO
RECONFIGURE WITH OVERRIDE
GO
部署 SQL Server Express Edition 資料庫
SQL Express Edition 資料庫由兩個檔案組成:.mdf 檔,內含資料庫結構描述和資料;以及 .ldf 檔,內含資料庫的記錄檔資訊。當您利用「複製網站」工具部署網站時,SQL Server Express Edition 資料庫檔案也會進行複製。只要在目標伺服器上安裝 SQL Server Express Edition,您的應用程式將繼續執行。如需詳細資訊,請參閱 HOW TO:使用複製網站工具複製網站檔案。
以下是部署 SQL Server Express Edition 資料庫的一些其他選項。
如果您對 SQL Server Express Edition 資料庫進行檔案架構的連接,便可以使用 XCopy、FTP 或其他方法,將這些檔案與您的應用程式一起複製至目標伺服器 (已安裝了 SQL Server Express Edition)。
因為 SQL Server Express Edition 與其他版本的 SQL Server 2005 使用相同的檔案格式,所以您可以將 .mdf 和 .ldf 檔案複製至執行 SQL Server 的伺服器,然後將這兩個檔案當做資料庫附加。
如果您想要複製內含資料庫結構描述但無資料的空白 SQL Server Express Edition 資料庫,SQL Server 管理工具可讓您產生能在目標資料庫中執行的指令碼,以便從您的開發資料庫複製結構描述。
注意事項: |
---|
如果您將 SQL Server Express Edition 資料庫部署至裝載彼此相互不信任之多重站台的 Web 伺服器,便無法使用檔案架構的連接或使用者執行個體來協助確認您的資料並未公開至伺服器上的其他應用程式。在此情況下,建議您將 SQL Server Express Edition 資料庫的內容移轉至另一個版本的 SQL Server 2005,您所部署的 ASP.NET 應用程式才能存取該內容。 |
如果您的 SQL Server Express Edition 資料庫包含加密的資訊,例如儲存在成員資格資料庫中的加密密碼,請確定加密金鑰也同時複製至目標伺服器。
若要移動整個 SQL Server Express Edition 資料庫,則必須確定該資料庫並沒有會造成資料庫鎖定之開啟的連接。
解除鎖定已鎖定的資料庫
如果資料庫具有開啟的連接,則會鎖定資料庫,而且無法移動或刪除該資料庫。開啟的連接可以透過 ASP.NET 應用程式、Visual Studio 或一些其他程式或資料庫用戶端使用。若要解除鎖定資料庫,必須關閉資料庫之所有開啟的連接。您可以依下列方式關閉開啟的連接:
在 [方案總管] 中以滑鼠右鍵按一下資料庫,然後選取 [中斷連結] 選項,或在 [伺服器總管] 中以滑鼠右鍵按一下資料庫,然後選取 [關閉連接],便可以關閉由 Visual Web Developer 所進行的連接。當您執行或偵錯 Web 應用程式時,Visual Web Developer 將會自動關閉任何開啟的資料庫連接。
結束應用程式,以關閉 ASP.NET 應用程式所進行的任何連接。使用 IIS 管理員或在 ASP.NET 應用程式的根目錄中放置一個名為 App_offline.htm 的檔案 (您必須移除此檔案才能重新啟動應用程式),便可以完成這個動作。
透過結束程式,關閉由其他資源 (如 Windows Form 應用程式) 所進行的任何連接。