部署資料庫 (C#)
部署 ASP.NET Web 應用程式需要從開發環境取得必要的檔案和資源到生產環境。 針對資料驅動 Web 應用程式,這包括資料庫架構和數據。 本教學課程是一系列中的第一個教學課程,會探索成功將資料庫從開發環境部署至生產環境所需的步驟。
簡介
部署 ASP.NET Web 應用程式需要從開發環境取得必要的檔案和資源到生產環境。 在過去六個教學課程中,我們探討如何部署簡單的書籍評論 Web 應用程式。 此示範網站是由許多伺服器端資源所組成-ASP.NET 頁面、組態檔、 Web.sitemap
檔案等等,以及映像和 CSS 檔案等客戶端資源。 但數據驅動 Web 應用程式呢? 部署使用資料庫的 Web 應用程式必須採取哪些額外步驟?
在接下來的幾個教學課程中,我們將解決部署數據驅動 Web 應用程式所需的步驟。 本教學課程一開始會檢查如何從開發環境取得資料庫架構和內容到生產環境,而後續的教學課程會查看所需的組態變更。 接下來,我們將探索部署使用應用程式服務的資料庫 (成員資格、角色、配置檔等) 的挑戰。
檢查更新的書籍評論 Web 應用程式
為了示範如何部署數據驅動 Web 應用程式,我已將 Book Reviews Web 應用程式從簡單的靜態網站更新為資料驅動 Web 應用程式。 如同先前,本教學課程中有兩個版本的應用程式下載:一個使用 Web 應用程式專案模型,另一個使用網站專案模型。
更新的 Book Reviews Web 應用程式會使用 SQL Server 2008 Express Edition 資料庫,該資料庫會儲存在網站App_Data
資料夾 (~/App_Data/Reviews.mdf
) 。 如果您已在計算機上安裝 SQL Server 2008,則示範應該執行時不會發生錯誤。 如果您有舊版的 SQL Server 您可以安裝免費的 SQL Server 2008 Express Edition,或者您可以使用本教學課程下載中的資料庫腳本自行建立資料庫。
資料庫 Reviews.mdf
包含四個資料表:
Genres
- 包含每個內容類型的記錄,例如技術、虛構和商務。Books
- 包含每個檢閱的記錄,以及 、Title
GenreId
、ReviewDate
和Review
等數據行。Authors
- 包含參與評論書籍之每一位作者的相關信息。BooksAuthors
- 多對多聯結數據表,指定作者撰寫了哪些書籍。
圖 1 顯示這四個數據表的 ER 圖表。
圖 1:書籍評論 Web 應用程式資料庫是由四個數據表所組成, (按兩下即可檢視完整大小的影像)
舊版的書籍評論網站針對每份書籍都有個別的 ASP.NET 頁面。 例如,有一 ~/Tech/TYASP35.aspx
個名為 的頁面,其中包含 24小時內的「教導自己」ASP.NET 3.5的檢閱。 這個新的數據驅動版本網站具有儲存在資料庫中的評論,以及單一 ASP.NET 頁面,Review.aspx?ID=bookId,其會顯示指定書籍的評論。 同樣地,有一個Genre.aspx?ID=genreId 頁面會列出指定內容類型中檢閱的書籍。
圖 2 和 3 顯示 Genre.aspx
和 Review.aspx
頁面的運作情形。 記下每個頁面網址列中的 URL。 在圖 2 中,它會Genre.aspx?ID=85d164ba-1123-4c47-82a0-c8ec75de7e0e。 由於 85d164ba-1123-4c47-82a0-c8ec75de7e0e 是 GenreId
技術內容類型的值,因此頁面標題會讀取「技術評論」,且點符清單會列舉屬於此內容類型的網站評論。
圖 2:[技術內容類型] 頁面 (按兩下即可檢視大小完整的影像)
圖 3:在 24 小時內自行教學 ASP.NET 3.5 的檢閱 (按兩下即可檢視大小完整的影像)
Book Reviews Web 應用程式也包含系統管理區段,系統管理員可以在其中新增、編輯和刪除內容類型、評論和作者資訊。 目前,任何訪客都可以存取管理區段。 在未來的教學課程中,我們將新增對用戶帳戶的支援,並只允許授權的使用者進入系統管理頁面。
如果您下載書籍評論應用程式,請記住其用途是示範部署數據驅動應用程式。 它不會在應用程式設計上展示最佳做法。 例如,DAL) 沒有個別的數據存取層 (;ASP.NET 頁面會透過 SqlDataSource 控制件或程式代碼後置類別中的 ADO.NET 程式代碼直接與資料庫通訊。 如需使用階層式架構建立數據驅動應用程式的更深入探討,請參閱使用 數據 教學課程。
開發與生產環境上的資料庫
當您在資料驅動 Web 應用程式上開始開發時,您必須指定資料庫 連接字串,以提供如何連線到資料庫的應用程式詳細數據。 此 連接字串 會指定資料庫伺服器、資料庫名稱和安全性資訊。 應用程式在開發期間最常使用的資料庫,與生產環境時所使用的資料庫不同。 針對開發與生產環境使用不同的資料庫有許多優點。 在開發中擁有不同的資料庫表示您不需要擔心不小心修改或刪除實時數據。 它也可讓您放入虛擬測試數據,或對數據模型進行重大變更,而不需擔心對生產環境中應用程式的影響。 在開發和生產環境中擁有不同資料庫的缺點是,當應用程式部署資料庫,以及資料庫架構或數據的任何相關變更也必須部署。
在第一個部署之前,資料庫只有一個實例,而且該實例位於開發環境中。 第一次將應用程式部署至生產環境時,我們不僅必須複製必要的伺服器端和用戶端檔案,也必須將資料庫從開發環境複製到生產環境。 這是我們目前與 Book Reviews Web 應用程式相依的位置 - 資料庫位於 App_Data
開發環境中的資料夾中,但尚未推送至生產環境。
一旦部署應用程式,資料庫會有兩個復本。 隨著應用程式成熟,可能會新增新功能,需要變更數據模型 (,例如將新數據行新增至現有數據表、對現有數據行進行變更、新增數據表等等) 。 下一次部署 Web 應用程式時,自上次部署以來,套用至開發環境中的資料庫變更必須套用至生產資料庫。 未來教學課程會討論一些管理此程式的策略。 本教學課程著重於將整個資料庫從開發環境部署到生產環境。
將資料庫部署至生產環境
本教學課程的其餘部分將探討如何將資料庫從開發環境部署到生產環境。 如果您遵循下列程式,您必須確定您的帳戶與 Web 主機提供者包含 Microsoft SQL Server 資料庫支援。 您也需要手邊有一些資訊,也就是資料庫伺服器名稱、資料庫名稱,以及用來連線到資料庫的使用者名稱和密碼。
如本教學課程稍早所述,Book Reviews 網站資料庫是儲存在 App_Data
資料夾中的 SQL Server 2008 Express Edition 資料庫。 部署這類資料庫是相當簡單的,就像將資料夾從開發環境複製到 App_Data
生產環境一樣簡單。 不過,大部分的 Web 主機提供者都不支援在資料夾中裝載資料庫 App_Data
,因為安全性原因。 相反地,Web 主機會在 SQL Server 資料庫伺服器的環境中提供帳戶。 將資料庫從開發環境部署到生產環境時,需要讓 Web 主機資料庫伺服器上註冊您的資料庫。
因此,如何將資料庫從開發環境移至生產環境? 根據 Web 主機所提供的服務,有幾種方式可以達成此目的。 使用某些主機,例如 DiscountASP.NET,您可以將資料庫或實際.mdf
檔案的備份 FTP 到您的網站,然後從 控制台 還原備份檔,或將檔案附加.mdf
至 SQL Server 資料庫伺服器。 透過這類工具部署資料庫,就像將資料夾複製到App_Data
生產環境一樣簡單,然後透過 控制台 加以附加。 這可能是第一次發佈資料庫的最簡單且最快速的方式。
另一種方法是使用資料庫發佈精靈。 資料庫發佈精靈是一種 Windows 傳統型應用程式,其會產生 SQL 命令來建立資料庫架構 - 資料表、預存程式、檢視表、使用者定義函式等等,以及選擇性地在其數據表中的數據。 然後,您可以透過 SQL Server Management Studio 連線到 Web 主機提供者的資料庫伺服器,然後執行此腳本以複製生產環境上的資料庫。 更棒的是,如果您的 Web 主機提供者支援 Microsoft 資料庫發佈服務,您可以讓資料庫發佈精靈代表您自動在資料庫伺服器上執行的腳本。 由於 [資料庫發佈精靈] 會產生腳本來建立資料庫架構和數據,因此不論您的 Web 主機提供者是否提供附加上傳 .mdf
檔案等功能,都能運作。
使用資料庫發佈精靈產生 SQL 命令以建立資料庫架構和數據
讓我們逐步解說如何使用資料庫發佈精靈,將書籍評論資料庫部署至生產環境。 如果您使用 Visual Studio 2008 或更新版本,則已安裝 [資料庫發佈精靈]。
開啟 Visual Studio 並瀏覽至 Reviews.mdf
資料庫。 如果您使用 Visual Web Developer,請移至 [資料庫總管] ;如果您使用 Visual Studio,請使用伺服器總管。 圖 4 顯示 Reviews.mdf
Visual Web Developer 中資料庫總管中的資料庫。 如圖 4 所示, Reviews.mdf
資料庫是由四個數據表、三個預存程式和使用者定義函數所組成。
圖 4:在 [資料庫總管] 或 [伺服器總管] 中尋找資料庫, (按兩下即可檢視大小完整的映像)
以滑鼠右鍵按兩下資料庫名稱,然後從操作功能表選擇 [發佈至提供者] 選項。 這會啟動資料庫發佈精靈 (請參閱圖 5) 。 按 [下一步] 以前進到啟動顯示畫面。
圖 5:資料庫發佈精靈啟動顯示畫面 (單擊以檢視大小完整的映射)
精靈中的第二個畫面會列出資料庫可供資料庫發佈精靈存取,並可讓您選擇要編寫所選資料庫中所有物件的腳本,還是挑選要編寫腳本的物件。 選取適當的資料庫,然後選取 [編寫所選資料庫中所有物件的腳本] 選項。
注意
如果您在圖 6 所示的畫面中按兩下一步, 時,收到「此精靈可編寫之類型的 資料庫資料庫名稱 中沒有物件」錯誤,請確定資料庫檔案的路徑太長。 發現如果資料庫檔案的路徑太長,就會發生此錯誤。
圖 6:資料庫發佈精靈啟動顯示畫面 (按兩下以檢視大小完整的映像)
在下一個畫面中,您可以產生腳本檔案,或者,如果您的 Web 主機支援腳本檔案,請將資料庫直接發佈至 Web 主機提供者的資料庫伺服器。 如圖 7 所示,我已將腳本寫入檔案 C:\REVIEWS.MDF.sql
。
圖 7:將資料庫編寫成檔案,或直接發佈至您的 Web 主機提供者, (按兩下即可檢視完整大小的映像)
後續畫面會提示您輸入各種腳本選項。 您可以指定文稿是否應該包含drop語句,以移除這些現有的物件。 這預設為 True,第一次部署資料庫時會很正常。 您也可以指定目標資料庫是否 SQL Server 2000、SQL Server 2005 或 SQL Server 2008。 最後,您可以指出是否要編寫架構和數據、只編寫數據腳本,還是只編寫架構腳本。 架構是資料庫物件的集合、數據表、預存程式、檢視等等。 數據是位於數據表中的資訊。
如圖 8 所示,我已將精靈設定為卸除現有的資料庫對象、產生 SQL Server 2008 資料庫的腳本,以及發佈架構和數據。
圖 8:指定發佈選項 (按下即可檢視完整大小的映射)
最後兩個畫面摘要說明即將採取的動作,然後顯示腳本的狀態。 執行精靈的凈結果是,我們有一個腳本檔案,其中包含在生產環境上建立資料庫所需的 SQL 命令,並填入與開發上相同的數據。
在生產環境資料庫上執行 SQL 命令
現在,我們有包含 SQL 命令的腳本,可建立資料庫及其所有保留的數據,就是在生產資料庫上執行腳本。 某些 Web 主機提供者會在其 控制台 中提供文字框,您可以在其中輸入 SQL 命令以在資料庫上執行。 如果您有非常大的腳本檔案,則此選項可能無法運作, (REVIEWS.MDF.sql
腳本檔案的大小超過 425 KB,例如) 。
更好的方法是使用 SSMS) SQL Server Management Studio (直接連線到生產資料庫伺服器。 如果您的電腦上已安裝非 Express 版本的 SQL Server,則您可能已安裝 SSMS。 否則,您可以下載並安裝免費的 SQL Server Management Studio Express Edition 複本。
啟動 SSMS,並使用 Web 主機提供者提供的資訊連線到您的 Web 主機資料庫伺服器。
圖 9:連線到 Web 主機提供者的資料庫伺服器 (按兩下以檢視完整大小的映射)
展開 [資料庫] 索引標籤,然後找出您的資料庫。 按兩下工具列左上角的 [新增查詢] 按鈕,從資料庫發佈精靈所建立的腳本檔案貼上 SQL 命令,然後按兩下 [執行] 按鈕,在生產資料庫伺服器上執行這些命令。 如果您的腳本檔案特別大,執行命令可能需要幾分鐘的時間。
圖 10:連線到 Web 主機提供者的資料庫伺服器 (按兩下以檢視大小完整的映像)
這一切就一切了! 此時,開發資料庫已複製到生產環境。 如果您在 SSMS 中重新整理資料庫,您應該會看到新的資料庫物件。 圖 11 顯示生產資料庫的數據表、預存程式和使用者定義函式,這些函式會鏡像開發資料庫上的資料表、預存程式和使用者定義函式。 由於我們指示資料庫發佈精靈發佈數據,所以生產資料庫數據表的數據與執行精靈時開發資料庫數據表的數據相同。 圖 12 顯示生產資料庫數據表中的數據 Books
。
圖 11:生產資料庫上已複製資料庫物件 (按兩下即可檢視完整大小的映像)
圖 12:生產資料庫包含與開發資料庫相同的數據 (按兩下即可檢視完整大小的映像)
此時,我們只會將開發資料庫部署到生產環境。 我們尚未查看部署 Web 應用程式本身,或檢查在生產環境上使用生產資料庫時,需要哪些組態變更。 我們將在下一個教學課程中討論這些問題!
摘要
部署數據驅動 Web 應用程式需要將開發期間所使用的資料庫複製到生產環境。 許多 Web 主機提供者都提供工具來簡化部署資料庫的程式。 例如,使用 DiscountASP.NET,您可以 FTP 資料庫.mdf
檔案 (或備份) ,然後從 控制台 將資料庫附加至資料庫伺服器。 不論 Web 主機提供者提供的功能為何,另一個選項是 Microsoft 資料庫發佈精靈工具,其會產生 SQL 命令腳本來建立開發資料庫的架構和數據。 產生此腳本之後,您就可以在生產資料庫上執行它。
現在,Book Reviews Web 應用程式的資料庫位於生產環境,我們可以部署應用程式。 不過,Web 應用程式的組態資訊會指定資料庫的 連接字串,而該 連接字串 參考開發資料庫。 我們需要在將月臺部署至生產環境時更新此 連接字串 資訊。 下一個教學課程會探討這些設定差異,並逐步解說將數據驅動書籍評論網站發佈至生產環境所需的步驟。
快樂的程序設計!
深入閱讀
如需本教學課程中討論之主題的詳細資訊,請參閱下列資源: