利用動(dòng)網(wǎng)提供的論壇程序創(chuàng)建了一個(gè)內(nèi)部論壇。原來(lái),這個(gè)論壇是發(fā)布在windows2000的IIS5上的。他的數(shù)據(jù)庫(kù)用的是Access。可是,當(dāng)我將這個(gè)論壇遷移到windows2003上以后,發(fā)現(xiàn)經(jīng)常死掉。到網(wǎng)上找了一下,并且咨詢了微軟的工程師,很多人都認(rèn)為i這跟他使用Access有關(guān)。并且,我想在公司內(nèi)部網(wǎng)站首頁(yè)增加一個(gè)跑馬燈來(lái)顯示論壇中的新帖子,可是,如果繼續(xù)用Access的話,訪問起來(lái)不是那么方便。于是決定遷移到SQl中。
第一步:將數(shù)據(jù)導(dǎo)入SQL Server
進(jìn)到SQL Server企業(yè)管理器,新建一個(gè)數(shù)據(jù)庫(kù),然后,選擇導(dǎo)入數(shù)據(jù),選擇Access數(shù)據(jù)庫(kù)作為導(dǎo)入源,導(dǎo)入所有的數(shù)據(jù)。
第二步:修改數(shù)據(jù)表
通過(guò)這種方式建立的數(shù)據(jù)表,是沒有主鍵和默認(rèn)值的,參照原來(lái)的Access庫(kù)修改各個(gè)表。(這個(gè)比較煩,但是一定得做,因?yàn)楹竺娴某绦蛑袝?huì)用到這些默認(rèn)值)
第三步:修改程序
將站點(diǎn)遷移到相應(yīng)的服務(wù)器,創(chuàng)建新的站點(diǎn)。首先,要改的就是數(shù)據(jù)庫(kù)聯(lián)接.由于Access中的一些函數(shù)和SqL中的一些函數(shù)不一樣,所以,程序會(huì)報(bào)錯(cuò),根據(jù)程序的報(bào)錯(cuò)信息修改相關(guān)的地方。這里主要要修改兩個(gè)地方:
SqL語(yǔ)句中的Now()函數(shù):
在Access中使用Now()函數(shù)來(lái)獲取當(dāng)前時(shí)間,而在SQL Server中用Getdate()函數(shù)來(lái)獲取當(dāng)前時(shí)間。但是,由于原來(lái)的程序是采用vb Script寫的,VbScript中也采用Now()函數(shù)獲取當(dāng)前時(shí)間,所以要小心Sql語(yǔ)句中的Datediff函數(shù)的第一個(gè)參數(shù):
在Access中DateDiff的第一個(gè)參數(shù)用引號(hào),并且只用一個(gè)字母來(lái)表示比較的部分,而在SqLServer中不需要引號(hào),并且用全稱和或者簡(jiǎn)稱來(lái)表示,并且簡(jiǎn)稱也是兩個(gè)字母的。
改完后逐項(xiàng)測(cè)試,改正所有的錯(cuò)誤(都挺簡(jiǎn)單的)。
程序就可以正常使用了,前后時(shí)間可能花了4個(gè)多小時(shí)吧。
我想到以下幾點(diǎn):
1、如果,我們要使用Access數(shù)據(jù)庫(kù),為了以后遷移方便,我們應(yīng)該盡量避免使用數(shù)據(jù)庫(kù)的函數(shù),而是多用程序語(yǔ)言的函數(shù),在SQL語(yǔ)句的外面解決計(jì)算問題。如果,不能避免要使用這些數(shù)據(jù)庫(kù)函數(shù),我們也應(yīng)該在代碼中設(shè)置明顯的注釋標(biāo)記,以便于以后遷移。
2、我們?cè)谠O(shè)計(jì)程序時(shí)候,要充分考慮數(shù)據(jù)庫(kù)的遷移的需要,在插入語(yǔ)句、查詢語(yǔ)句等語(yǔ)句的時(shí)候要盡量采用標(biāo)準(zhǔn)的SqL語(yǔ)法,并且要不厭其煩得插入默認(rèn)值,而不要依賴數(shù)據(jù)庫(kù)提供默認(rèn)值,這樣做,對(duì)以后的改進(jìn)可能會(huì)有好處。
|
新聞熱點(diǎn)
疑難解答
圖片精選