SQL數(shù)據(jù)庫(kù)轉(zhuǎn)access數(shù)據(jù)庫(kù)步驟:
1. 建立access數(shù)據(jù)庫(kù):在access中建立access數(shù)據(jù)庫(kù)和表,access字段類(lèi)型與sql中字段類(lèi)型的對(duì)應(yīng)關(guān)系。
2. 在Access中建表是應(yīng)注意它的保留關(guān)鍵字:比如Password 如果表中的某個(gè)字段使用了關(guān)鍵字,那么會(huì)導(dǎo)致一系列的語(yǔ)句錯(cuò)誤。比如update T_Users setUsername=@Username,Password=@Password where UserId=@UserId"此時(shí)就會(huì)提示"System.Data.OleDb.OleDbException: UPDATE 語(yǔ)句的語(yǔ)法錯(cuò)誤".更多保留關(guān)鍵字可以參照互聯(lián)網(wǎng)。
3. 從sql導(dǎo)入數(shù)據(jù)到access數(shù)據(jù)庫(kù)。
注意:sql2008只能導(dǎo)出到access2007一下的版本的數(shù)據(jù)庫(kù)。
Asp.net應(yīng)做的修改
1. 修改連接字符串:
將<add name="DBStr"connectionString="data source=.;Database=shelian;integratedsecurity=true"/>改為
<addname ="DBStr"connectionString ="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=|DataDirectory|shelian.mdb"providerName ="System.Data.OleDb"/>
提示:其中"Jet.OLEDB.4.0"對(duì)應(yīng)的是access2003版本,"|DataDirectory|"表示數(shù)據(jù)庫(kù)在App_Date目錄下。
2. 導(dǎo)入 using System.Data.OleDb;命名空間。
將以Sql開(kāi)頭的SqlConnection , SqlCommand , SqlParameter, SqlDataAdapter, SqlParameter, SqlDataReader,SqlType等改成OleDbConnection ,OleDbCommand , OleDbParameter,OleDbDataAdapter, OleDbParameter, OleDbDataReader, OleDbType.
3. 修改。net文件中要操作的表中字段類(lèi)型的
new SqlParameter("@CategoryName",SqlDbType.NVarChar,100),
newSqlParameter("@ParentId",SqlDbType.NVarChar,50),
newSqlParameter("@Path",SqlDbType.NVarChar,200),
newSqlParameter("@Depth",SqlDbType.Int,4),
newSqlParameter("@ChildIds",SqlDbType.NVarChar,50),
newSqlParameter("@IsActive",SqlDbType.Bit,1),
newSqlParameter("@ArticleNum",SqlDbType.Int,4),
newSqlParameter("@Readme",SqlDbType.NVarChar,200),
newSqlParameter("@CategoryId",SqlDbType.Int,4)};
改成:
new OleDbParameter("@CategoryName", OleDbType.LongVarWChar,100),
new OleDbParameter("@ParentId", OleDbType.LongVarWChar,50),
new OleDbParameter("@Path", OleDbType.LongVarWChar,200),
new OleDbParameter("@Depth", OleDbType.Integer,4),
newOleDbParameter("@ChildIds",OleDbType.LongVarWChar,50),
new OleDbParameter("@IsActive", OleDbType.Boolean,1),
new OleDbParameter("@ArticleNum", OleDbType.Integer,4),
new OleDbParameter("@Readme", OleDbType.LongVarWChar,200),
new OleDbParameter("@CategoryId", OleDbType.Integer,4)};
4. 修改查詢(xún)字語(yǔ)句式:
4.1 將去掉true或false的單引號(hào),如HomeShowImg='true '改成HomeShowImg=true
4.2 !=0改成<>0 ,如 IsPicNews !=0 -> IsPicNews <>0
4.3 =''改成is null.與LogImagePath !=' -> LogImagePath is not nul
4.4 NewsId ='" + newsiid + "'";改成NewsId =" + newsiid + "";
5. 當(dāng)update語(yǔ)句沒(méi)錯(cuò)但內(nèi)容無(wú)法更新而且VS又沒(méi)提示出錯(cuò)的時(shí)候,可以考慮是不是OleDbParameter中參數(shù)的對(duì)應(yīng)順序的問(wèn)題,OleDbParameter參數(shù)的順序迎合update語(yǔ)句中出現(xiàn)的順序保持一致。
比如: string cmdText = "updateT_FriendlyLink set IsShown=@IsShown,LinkUrl=@txtUrl,LinkText=@txtTitle whereId=@Id";
OleDbParameter[]ps ={
newOleDbParameter ("@Id",Id),
newOleDbParameter ("@IsShown",IsShown),
newOleDbParameter ("@txtUrl",txtUrl),
newOleDbParameter ("@txtTitle",txtTitle),
};
這樣在SQLServer中可以運(yùn)行,但在Access中必須改成
OleDbParameter[]ps ={
newOleDbParameter ("@IsShown",IsShown),
newOleDbParameter ("@txtUrl",txtUrl),
newOleDbParameter ("@txtTitle",txtTitle),
new OleDbParameter ("@Id",Id),
};
6.Access不支持:select @@IDENTITY
7.Access不支持OW_NUMBER() OVER聚合函數(shù)。當(dāng)分頁(yè)時(shí)可使用"select a.* from (select top{0} * from t_news {2} {3}) a leftjoin (select top {1} * from t_news {2}{3}) b on a.NewsId=b.NewsId where iif(b.NewsId,'0','1')='1'", endIndex, startIndex-1, swhere, sorder));替代。
8. 在Access 不能出現(xiàn)top 0或top一個(gè)負(fù)數(shù)。 如select top 0 * fromt_news where isshown=true則會(huì)報(bào)錯(cuò):"SELECT子句中包含一個(gè)保留字、拼寫(xiě)錯(cuò)誤或丟失的參數(shù),或標(biāo)點(diǎn)符號(hào)不正確。"
Access數(shù)據(jù)庫(kù)字段類(lèi)型說(shuō)明以及與SQL之間的對(duì)照關(guān)系
文本 nvarchar(n)
備注 ntext
數(shù)字(長(zhǎng)整型) int
數(shù)字(整型) smallint
數(shù)字(單精度) real
數(shù)字(雙精度) float
數(shù)字(字節(jié)) tinyint
貨幣 money
日期 smalldatetime
布爾 bit
附:轉(zhuǎn)換成SQL的腳本。
ALTER TABLE tbALTER COLUMN aa Byte 數(shù)字[字節(jié)]
ALTER TABLE tb ALTER COLUMN aa Long 數(shù)字[長(zhǎng)整型]
ALTER TABLE tb ALTER COLUMN aa Short 數(shù)字[整型]
ALTER TABLE tb ALTER COLUMN aa Single 數(shù)字[單精度
ALTER TABLE tb ALTER COLUMN aa Double 數(shù)字[雙精度]
ALTER TABLE tb ALTER COLUMN aa Currency 貨幣
ALTER TABLE tb ALTER COLUMN aa Char 文本
ALTER TABLE tb ALTER COLUMN aa Text(n) 文本,其中n表示字段大小
ALTER TABLE tb ALTER COLUMN aa Binary 二進(jìn)制
ALTER TABLE tb ALTER COLUMN aa Counter 自動(dòng)編號(hào)
ALTER TABLE tb ALTER COLUMN aa Memo 備注
ALTER TABLE tb ALTER COLUMN aa Time 日期/時(shí)間
在表的設(shè)計(jì)視圖中,每一個(gè)字段都有設(shè)計(jì)類(lèi)型,Access允許九種數(shù)據(jù)類(lèi)型:文本、備注、數(shù)值、日期/時(shí)間、貨
幣、自動(dòng)編號(hào)、是/否、OLE對(duì)象、超級(jí)鏈接、查詢(xún)向?qū)А?/P>
文本:這種類(lèi)型允許最大255個(gè)字符或數(shù)字,Access默認(rèn)的大小是50個(gè)字符,而且系統(tǒng)只保存輸入到字段中的
字符,而不保存文本字段中未用位置上的空字符。可以設(shè)置"字段大小"屬性控制可輸入的最大字符長(zhǎng)度。
備注:這種類(lèi)型用來(lái)保存長(zhǎng)度較長(zhǎng)的文本及數(shù)字,它允許字段能夠存儲(chǔ)長(zhǎng)達(dá)64000個(gè)字符的內(nèi)容。但Access不
能對(duì)備注字段進(jìn)行排序或索引,卻可以對(duì)文本字段進(jìn)行排序和索引。在備注字段中雖然可以搜索文本,但卻不如
在有索引的文本字段中搜索得快。
數(shù)字:這種字段類(lèi)型可以用來(lái)存儲(chǔ)進(jìn)行算術(shù)計(jì)算的數(shù)字?jǐn)?shù)據(jù),用戶(hù)還可以設(shè)置"字段大小"屬性定義一個(gè)特定
的數(shù)字類(lèi)型,任何指定為數(shù)字?jǐn)?shù)據(jù)類(lèi)型的字型可以設(shè)置成"字節(jié)"、"整數(shù)"、"長(zhǎng)整數(shù)"、"單精度數(shù)"、
"雙精度數(shù)"、"同步復(fù)制ID"、"小數(shù)"五種類(lèi)型。在Access中通常默認(rèn)為"雙精度數(shù)".
日期/時(shí)間:這種類(lèi)型是用來(lái)存儲(chǔ)日期、時(shí)間或日期時(shí)間一起的,每個(gè)日期/時(shí)間字段需要8個(gè)字節(jié)來(lái)存儲(chǔ)空間。
貨幣:這種類(lèi)型是數(shù)字?jǐn)?shù)據(jù)類(lèi)型的特殊類(lèi)型,等價(jià)于具有雙精度屬性的數(shù)字字段類(lèi)型。向貨幣字段輸入數(shù)據(jù)
時(shí),不必鍵入人民幣符號(hào)和千位處的逗號(hào),Access會(huì)自動(dòng)顯示人民幣符號(hào)和逗號(hào),并添加兩位小數(shù)到貨幣字段。
當(dāng)小數(shù)部分多于兩位時(shí),Access會(huì)對(duì)數(shù)據(jù)進(jìn)行四舍五入。精確度為小數(shù)點(diǎn)左方15位數(shù)及右方4位數(shù)。
自動(dòng)編號(hào):這種類(lèi)型較為特殊,每次向表格添加新記錄時(shí),Access會(huì)自動(dòng)插入唯一順序或者隨機(jī)編號(hào),即在自
動(dòng)編號(hào)字段中指定某一數(shù)值。自動(dòng)編號(hào)一旦被指定,就會(huì)永久地與記錄連接。如果刪除了表格中含有自動(dòng)編號(hào)字
段的一個(gè)記錄后,Access并不會(huì)為表格自動(dòng)編號(hào)字段重新編號(hào)。當(dāng)添加某一記錄時(shí),Access不再使用已被刪除的
自動(dòng)編號(hào)字段的數(shù)值,而是重新按遞增的規(guī)律重新賦值。
是/否:這種字段是針對(duì)于某一字段中只包含兩個(gè)不同的可選值而設(shè)立的字段,通過(guò)是/否數(shù)據(jù)類(lèi)型的格式特性,用戶(hù)可以對(duì)是/否字段進(jìn)行選擇。
OLE對(duì)象:這個(gè)字段是指字段允許單獨(dú)地"鏈接"或"嵌入"OLE對(duì)象。添加數(shù)據(jù)到OLE對(duì)象字段時(shí),可以鏈接或嵌入Access表中的OLE對(duì)象是指在其他使用OLE協(xié)議程序創(chuàng)建的對(duì)象,例如WORD文檔、EXCEL電子表格、圖像、聲音或其他二進(jìn)制數(shù)據(jù)。OLE對(duì)象字段最大可為1GB,它主要受磁盤(pán)空間限制。
超級(jí)鏈接:這個(gè)字段主要是用來(lái)保存超級(jí)鏈接的,包含作為超級(jí)鏈接地址的文本或以文本形式存儲(chǔ)的字符與數(shù)字的組合。當(dāng)單擊一個(gè)超級(jí)鏈接時(shí),WEB瀏覽器或Access將根據(jù)超級(jí)鏈接地址到達(dá)指定的目標(biāo)。超級(jí)鏈接最多可包含三部分:一是在字段或控件中顯示的文本;二是到文件或頁(yè)面的路徑;三是在文件或頁(yè)面中的地址。在這個(gè)字段或控件中插入超級(jí)鏈接地址最簡(jiǎn)單的方法就是在"插入"菜單中單擊"超級(jí)鏈接"命令。
查閱向?qū)В哼@個(gè)字段類(lèi)型為用戶(hù)提供了一個(gè)建立字段內(nèi)容的列表,可以在列表中選擇所列內(nèi)容作為添入字段的內(nèi)容。
更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄