北京北大青鳥學(xué)校講解:本地和服務(wù)器數(shù)據(jù)庫(kù)

上一篇文章中,北京北大青鳥學(xué)校學(xué)術(shù)老師介紹了Visual Web Developer和數(shù)據(jù),這篇內(nèi)容將介紹本地和服務(wù)器數(shù)據(jù)庫(kù)。

北京北大青鳥學(xué)校學(xué)術(shù)老師介紹,我們已經(jīng)熟悉了基于服務(wù)器的數(shù)據(jù)庫(kù)和連接字符串。在這種情況下,數(shù)據(jù)庫(kù)服務(wù)器(例如SQL Server 2005)把數(shù)據(jù)庫(kù)名稱與服務(wù)器所維護(hù)的數(shù)據(jù)庫(kù)文件相關(guān)聯(lián)。我們可以通過(guò)指定服務(wù)器名稱、數(shù)據(jù)庫(kù)名稱和憑證來(lái)連接到基于服務(wù)器的數(shù)據(jù)庫(kù),例如:

"server=(local)\SQLExpress;database=Pubs;Integrated Security=true"

但是,北京北大青鳥學(xué)校學(xué)術(shù)老師介紹Visual Studio 2005還支持本地?cái)?shù)據(jù)庫(kù)的概念,它是添加到當(dāng)前Web應(yīng)用程序的App_Data目錄中的一個(gè)文件。在App_Data目錄中存儲(chǔ)數(shù)據(jù)文件是安全的,因?yàn)檫@個(gè)目錄中的內(nèi)容永遠(yuǎn)不會(huì)響應(yīng)用戶的請(qǐng)求。這個(gè)目錄也是存儲(chǔ)XML文件和其它數(shù)據(jù)存儲(chǔ)的推薦位置。本地的SQL Server Express數(shù)據(jù)庫(kù)帶有.MDF擴(kuò)展名(例如"MyDatabase.MDF"),它是SQL Server支持的標(biāo)準(zhǔn)文件格式。當(dāng)連接到服務(wù)器的時(shí)候,數(shù)據(jù)庫(kù)還有一個(gè)關(guān)聯(lián)的日志文件(例如"MyDatabase_log.LDF")。數(shù)據(jù)庫(kù)文件和日志文件的位置必須在一起。

北京北大青鳥學(xué)校學(xué)術(shù)老師介紹,我們可以通過(guò)使用相對(duì)路徑連接字符串把本地文件數(shù)據(jù)庫(kù)自動(dòng)地附加到SQL Server Express。相對(duì)路徑確保了應(yīng)用程序遷移到任何其它地方的時(shí)候都不會(huì)中斷數(shù)據(jù)庫(kù)連接。Web應(yīng)用程序中的相對(duì)路徑連接字符串如下所示:

"server=(local)\SQLExpress;AttachDbFileName=|DataDirectory|MyDatabase.mdf;Integrated Security=true;User Instance=true"

上面的連接字符串還有兩個(gè)額外的屬性。AttachDbFileName屬性指定連接打開的時(shí)候動(dòng)態(tài)附加到服務(wù)器上的數(shù)據(jù)庫(kù)文件的位置。盡管這個(gè)屬性可以接受數(shù)據(jù)庫(kù)的完整路徑(例如使用|DataDirectory|語(yǔ)法),但是在運(yùn)行時(shí)這個(gè)路徑會(huì)被應(yīng)用程序的App_Data目錄所代替。這也保證了應(yīng)用程序遷移到其它位置的時(shí)候連接不會(huì)中斷。第二個(gè)屬性是User Instance=true,它指定SQL Server Express附加數(shù)據(jù)庫(kù)的方式。在這種情況下,SQL Server Express為了把數(shù)據(jù)庫(kù)附加到新的實(shí)例,建立一個(gè)新的進(jìn)程,在打開連接的用戶身份下運(yùn)行。在ASP.NET應(yīng)用程序中,這個(gè)用戶是本地的ASPNET 帳號(hào)或默認(rèn)的Network Service,這依賴于操作系統(tǒng)。為了安全地附加非系統(tǒng)管理員帳號(hào)(例如ASP.NET帳號(hào))提供的數(shù)據(jù)庫(kù)文件,建立一個(gè)獨(dú)立的SQL Server用戶實(shí)例是必要的。

北京北大青鳥學(xué)校提醒:由于在默認(rèn)情況下,所有的ASP.NET應(yīng)用程序運(yùn)行在同一個(gè)進(jìn)程下,因此所有的應(yīng)用程序會(huì)把本地?cái)?shù)據(jù)庫(kù)附加到同一個(gè)SQL Server Express實(shí)例。這意味著不管應(yīng)用程序最初附加的數(shù)據(jù)庫(kù)是哪一個(gè),所有的應(yīng)用程序?qū)Ω郊拥竭@個(gè)實(shí)例的所有數(shù)據(jù)庫(kù)都擁有相同的訪問權(quán)限。為了隔離不同的應(yīng)用程序,你必須讓每個(gè)應(yīng)用程序運(yùn)行在不同的工作進(jìn)程或應(yīng)用程序池(在IIS 6中)中。由于這個(gè)原因,本地SQL Server數(shù)據(jù)庫(kù)主要是為了方便開發(fā),而不是用于代替共享主機(jī)環(huán)境下的基于服務(wù)器的數(shù)據(jù)庫(kù)。

此外,北京北大青鳥學(xué)校還要提醒一點(diǎn),不允許兩個(gè)用戶同時(shí)連接到一個(gè)本地?cái)?shù)據(jù)庫(kù)。在Visual Studio中設(shè)計(jì)應(yīng)用程序的時(shí)候,設(shè)計(jì)器自動(dòng)地釋放連接,以保證Visual Studio和ASP.NET能夠共享數(shù)據(jù)庫(kù)文件(例如在設(shè)計(jì)器中調(diào)試運(yùn)行中的應(yīng)用程序)。

北大青鳥網(wǎng)上報(bào)名
北大青鳥招生簡(jiǎn)章