將數(shù)據(jù)庫(kù)從Access2003升級(jí)到Sql Server 2000_第1頁(yè)
將數(shù)據(jù)庫(kù)從Access2003升級(jí)到Sql Server 2000_第2頁(yè)
將數(shù)據(jù)庫(kù)從Access2003升級(jí)到Sql Server 2000_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

將數(shù)據(jù)庫(kù)從Access2003升級(jí)到SqlServer2000將數(shù)將數(shù)據(jù)庫(kù)從Access2003升級(jí)到SqlServer2000,原本以為不是很麻煩(開(kāi)始時(shí)以為就改改數(shù)據(jù)庫(kù)的連接代碼就行了),但在這次的操作中,雖然在操作前也在網(wǎng)上查了一些相關(guān)的資料,但還是感覺(jué)有些不夠。在這里,我就將本次的升級(jí)過(guò)程中所遇到的問(wèn)題,怎么去解決寫出來(lái),供以后的各位參考一下。在進(jìn)行升級(jí)時(shí)候,一定要先去查閱一些資料,最后你得對(duì)整個(gè)過(guò)程有一個(gè)大體的了解,不然到時(shí)到了哪步應(yīng)該作些什么都忘了,也就無(wú)處升級(jí)了。一、好了,在升級(jí)前,首先要安裝SqlServer20000至于怎么去安裝我就不講了,網(wǎng)上的資料很多,在這里只是提醒兩點(diǎn):1)安裝的版本:SqlServer2000一共分為兩個(gè)版本,專業(yè)版和家庭版,在安裝的時(shí)候一定要注意到你的操作系統(tǒng)。因?yàn)楹芏嗳嗽谶M(jìn)行網(wǎng)頁(yè)制做和調(diào)試的時(shí)候一般情況下都用的是windowsxp系統(tǒng),所在這里就不能安裝專業(yè)版,專業(yè)版都是針對(duì)于服務(wù)器的操作系統(tǒng),比如說(shuō):winNT,win2000,win2003等。windowsxp去安裝專業(yè)版是不能安裝服務(wù)端的,所以在安裝SqlServer2000的時(shí)候一定要注意版本的選擇。2)數(shù)據(jù)的導(dǎo)入:安裝完后就是要進(jìn)行數(shù)據(jù)的導(dǎo)入了(可以參考另一篇文章Access數(shù)據(jù)庫(kù)升級(jí)成SqlServer2000開(kāi)發(fā)文檔》),也就將Access2003數(shù)據(jù)庫(kù)中原有的數(shù)據(jù)導(dǎo)入到SqlServer2000里去。在導(dǎo)入的時(shí)候首先要在SqlServer2000里面新建一個(gè)數(shù)據(jù)庫(kù),數(shù)據(jù)表是存在數(shù)據(jù)庫(kù)中的。一般來(lái)說(shuō)呢,在進(jìn)行數(shù)據(jù)導(dǎo)入時(shí)候不會(huì)有什么問(wèn)題,但也不例外。如果你的Access數(shù)據(jù)有密碼的話,我建議在進(jìn)行數(shù)據(jù)導(dǎo)入前先把密碼去掉,我不知道你們能不能,反正我是沒(méi)成功,如果遇到了問(wèn)題就去掉,沒(méi)遇到就算了。如果Access2003數(shù)據(jù)庫(kù)中的表太多了的話,在導(dǎo)入后一定要檢查一下是不是所有的表都導(dǎo)入到SqlServer2000里面了……還有,在將Access2003中的數(shù)據(jù)導(dǎo)入以SqlServer2000的時(shí)候因?yàn)橛幸粋€(gè)數(shù)據(jù)轉(zhuǎn)換,也就是說(shuō)要將Access2003的數(shù)據(jù)格式轉(zhuǎn)換成SqlServer2000里的數(shù)據(jù)格式,如果在Access2003數(shù)據(jù)庫(kù)中一個(gè)表中有一條數(shù)據(jù)不滿足SqlServer2000里的格式,則這個(gè)表里面的所有數(shù)據(jù)都不導(dǎo)入到SqlServer2000中。這個(gè)時(shí)候你不防打開(kāi)SqlServer2000(這個(gè)時(shí)候已經(jīng)有這個(gè)表名存在了,只是表里沒(méi)有數(shù)據(jù)而已),找到相應(yīng)的表,打開(kāi)設(shè)計(jì)視圖,將其中的ntxt字段改成txt,再試一下,如果還不行話,就證明你Access2003數(shù)據(jù)庫(kù)中中表里面的數(shù)據(jù)就真有的問(wèn)題了。比例說(shuō):時(shí)間字段不可能出現(xiàn)9999-12-12這樣的數(shù)據(jù),導(dǎo)入出錯(cuò)了有相應(yīng)的提示,會(huì)提示你說(shuō)在...數(shù)據(jù)庫(kù)中….表…第幾行有問(wèn)題。但這個(gè)時(shí)候你要注意了,提示中的第多少行并不是我們直接打開(kāi)表中的多少行。具體是多少行我也不是很清楚。數(shù)據(jù)庫(kù)在進(jìn)行數(shù)據(jù)轉(zhuǎn)換的時(shí)候打開(kāi)數(shù)據(jù)表的排列方式和我們直接打開(kāi)數(shù)據(jù)表的排列方式是不一樣的。二、數(shù)據(jù)導(dǎo)入完了這個(gè)時(shí)候還要做一件事,就是修改SqlServer2000數(shù)據(jù)庫(kù)中各個(gè)表的字段類型。當(dāng)我們把數(shù)據(jù)從Access2003中導(dǎo)入到SqlServer2000中你會(huì)發(fā)現(xiàn)。在Access2003中字段為自增型(一般都為ID字段)的在SqlServer2000中沒(méi)了,也就是說(shuō)以前在向Access數(shù)據(jù)庫(kù)中插入數(shù)據(jù)中,有一個(gè)字段是自增型的,但把表導(dǎo)入到SqlServer2000后,這個(gè)字段的類型是int,不是自增型,你這個(gè)時(shí)候你要手動(dòng)添加上去;要把SqlServer2000中的smalldatetime字段改成datetime;以前在Access2003數(shù)據(jù)庫(kù),字段有默認(rèn)值的,在導(dǎo)入SqlServer2000后就沒(méi)有了,也要手動(dòng)添加上去。比如,時(shí)間字段有默認(rèn)值[now()]在SqlServer2000中沒(méi)了,要添加上去,但不能寫成now()函數(shù)了,將其改成getdate();將ntxt字段類型改成txt類型;在Access2003中,有些字段會(huì)有一些說(shuō)明,比如說(shuō)InsertTime是指數(shù)據(jù)的寫入時(shí)間,但導(dǎo)入到SqlServer2000就沒(méi)了,你覺(jué)得有必要的話就添加上去,沒(méi)有必要也可以不添,這對(duì)于數(shù)據(jù)庫(kù)的操作來(lái)說(shuō)沒(méi)什么影響的。三、數(shù)據(jù)庫(kù)的修改到上面就完了,下面是代碼。開(kāi)始的時(shí)候我以為數(shù)據(jù)庫(kù)升級(jí)了,只是修改一下連接代碼,也就是conn.asp里面的連接代碼就完了,其實(shí),遠(yuǎn)不只這些。如果你寫代碼的習(xí)慣比較好的話,需要改的代碼不是很多,但如果不好的,對(duì)于一個(gè)大的網(wǎng)站或平臺(tái)來(lái)講,是一個(gè)很大的工程量。在這里我就講一下代碼需要修改的地方(我用到的):查詢時(shí)出現(xiàn)關(guān)鍵字:比如說(shuō),在沒(méi)有進(jìn)行數(shù)據(jù)庫(kù)升級(jí)前你操作語(yǔ)句是:Sql=”Selectusernamefromuserwhereid=”&request.from("id”)是沒(méi)有什么問(wèn)題,但在升級(jí)后你就會(huì)發(fā)現(xiàn)出現(xiàn)問(wèn)題了,錯(cuò)誤提示:在關(guān)鍵字'user'附近有語(yǔ)法錯(cuò)誤。為什么呢?因?yàn)樵趗ser是關(guān)鍵字,在SqlServer2000中聲明關(guān)鍵字是會(huì)出錯(cuò)的,所以,在SqlServer2000里的查詢語(yǔ)句應(yīng)該改成:Str=”Selectusernamefrom[user]whereid=”&request.from(“id”),對(duì)于關(guān)鍵字user要添加一個(gè)[],讓其不作為關(guān)鍵進(jìn)行處理。所以在這里要也要提醒一下寫代碼的同志,特別是剛進(jìn)門的同志,一定要養(yǎng)成良好的寫代碼習(xí)慣,在聲明變量的時(shí)候不要總拿關(guān)鍵字開(kāi)刀,一定不要,雖說(shuō)在你這個(gè)環(huán)境可能沒(méi)什么事,誰(shuí)能保證將代碼帶了另外一個(gè)環(huán)境不會(huì)出事呢?記住,千萬(wàn)不要用關(guān)鍵字,不然到時(shí)你會(huì)哭,而且哭的很難看。如果你的操作語(yǔ)句,不管是查詢,刪除還是更新,只要出現(xiàn)了錯(cuò)誤,要看看是不是關(guān)鍵字在作怪。函數(shù):在Access數(shù)據(jù)庫(kù)中的有些函數(shù)在SqlServer2000是不支持的,比如說(shuō)cdbl函數(shù),反正我是覺(jué)得不支持的,因?yàn)橛幸粭l查詢語(yǔ)句不管我怎么改都是出錯(cuò),結(jié)果將這個(gè)函數(shù)去掉不可以了,這是一個(gè)將數(shù)值轉(zhuǎn)換成雙精度的一個(gè)函數(shù),如果你在遇的時(shí)候可以去掉,或是在SqlServer2000找一個(gè)和這個(gè)函數(shù)功能一樣的進(jìn)行替換;還有一個(gè)instr函數(shù),在SqlServer2000中也是不支持的,但可以用charindex函數(shù)代替;還有,在向數(shù)據(jù)庫(kù)中寫入數(shù)據(jù)的時(shí)候,now()函數(shù)是不可用的,要改成date(),比如說(shuō):Rs.opensql,conn,1,1Rs.addnewRs("uptime”)=now()Rs.update()要改成:Rs.opensql,conn,1,1Rs.addnewRs("uptime”)=date()Rs.update()上面這點(diǎn)也要注意。但now()函數(shù)的格式和date()函數(shù)的格式是不一樣的,now()精確到時(shí)分秒的,date()只是精確到天的。。。用rs.addnew()不知道怎么寫,但可以用insert語(yǔ)句:Sql=”Insertintotable(uptime)values(getdate())”這樣,可以獲得和now()函數(shù)一樣的效果,但用Rs("uptime”)=getdate()會(huì)出錯(cuò)。順序:是什么順序呢?對(duì)字段的操作順序,這是一個(gè)很郁悶的問(wèn)題,因?yàn)槲矣昧艘惶斓臅r(shí)間才弄明白。將數(shù)據(jù)庫(kù)從Access2003升級(jí)到SqlServer2000后,你會(huì)發(fā)現(xiàn),有些字段在數(shù)據(jù)庫(kù)中的明明是有值的,但用語(yǔ)句讀出來(lái)就是沒(méi)值,是怎么回事呢?太深?yuàn)W的理論我不懂,你們可以在網(wǎng)上去查查看,我只告訴你,是讀取字段順序的問(wèn)題,特別是在讀取txt字段和別的字段時(shí),比如說(shuō):在SqlServer2000數(shù)據(jù)庫(kù)中的順序是這樣的:UsernamevarcharImgpathtxt你在讀取數(shù)據(jù)的時(shí)候:Imgpath=rs('Tmgpath'')Username=rs("Username”)在沒(méi)進(jìn)行數(shù)據(jù)庫(kù)升級(jí)前也許是沒(méi)有問(wèn)題的,但數(shù)據(jù)庫(kù)升級(jí)后你會(huì)就發(fā)現(xiàn)username始終沒(méi)有值,但在數(shù)據(jù)庫(kù)中明明是有值的,為什么呢?????嘿嘿,就是讀取字段順序的原因,將其改成Username=rs("Username”)Imgpath=rs('Tmgpath'')和數(shù)據(jù)庫(kù)中字段順序一樣的就行了,遇到類式的問(wèn)題也可以這樣修改。字段長(zhǎng)度:對(duì)于字段長(zhǎng)度,在向數(shù)據(jù)庫(kù)中寫入數(shù)據(jù)時(shí)要判斷,我想這是每個(gè)程度員都會(huì)想到的一個(gè)問(wèn)題,因?yàn)閷懭霐?shù)據(jù)字段長(zhǎng)度超過(guò)了我們?cè)O(shè)計(jì)長(zhǎng)度話,會(huì)報(bào)錯(cuò)但在這里,我要講的是另外一個(gè)比較隱型的。對(duì)于一些字段,寫代碼用的是以前的數(shù)據(jù)加上更新后的數(shù)據(jù),比如說(shuō):Sql=”updatetablesetloginuser=loginuser+’”Request.Form("user”)”’”。。。。對(duì)于這樣類型的更新語(yǔ)句,一定要想到有一個(gè)時(shí)間,字段的長(zhǎng)度就超過(guò)了我們?cè)O(shè)計(jì)的長(zhǎng)度,因?yàn)殚L(zhǎng)度是一直在加的,沒(méi)有減,即使是字段長(zhǎng)度為10000。所以你得要考慮到當(dāng)字段長(zhǎng)度超過(guò)設(shè)計(jì)長(zhǎng)度后的相關(guān)處理代碼。也許你把字段設(shè)計(jì)的長(zhǎng)一點(diǎn),現(xiàn)在不會(huì)出錯(cuò),但只要程序一直在用,有一天,肯定會(huì)出錯(cuò)的。在建立表時(shí),你最好為每一個(gè)字段有一個(gè)說(shuō)明,當(dāng)然,除非這個(gè)系統(tǒng)一直都是你在維護(hù)(但可能性不是很大)。如果你的程序會(huì)有后序開(kāi)法,最好寫一個(gè),不然,后序開(kāi)法人員會(huì)在每個(gè)字段是什么含意上什么意思花費(fèi)很多的時(shí)間(我現(xiàn)在就是,有時(shí)為了弄清楚一個(gè)字段的意思,不得不去看幾個(gè)頁(yè)面,轉(zhuǎn)來(lái)轉(zhuǎn)去,得花費(fèi)很多時(shí)間),程序員何必為難程序員呢?這是一個(gè)習(xí)慣,一個(gè)很好的習(xí)慣。以上就差不多是我這次升級(jí)數(shù)據(jù)庫(kù)所遇到的問(wèn)題,寫出是只是讓遇到同樣類似的問(wèn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論