主頁 > 知識庫 > asp Driver和Provider兩種連接字符串連接Access時的區(qū)別

asp Driver和Provider兩種連接字符串連接Access時的區(qū)別

熱門標(biāo)簽:科大訊飛語音識別系統(tǒng) 團(tuán)購網(wǎng)站 電子圍欄 服務(wù)器配置 阿里云 Mysql連接數(shù)設(shè)置 Linux服務(wù)器 銀行業(yè)務(wù)
一個網(wǎng)站程序,在添加新聞時出現(xiàn)錯誤
以下是錯誤提示:
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e21'
多步 OLE DB 操作產(chǎn)生錯誤。如果可能,請檢查每個 OLE DB 狀態(tài)值。沒有工作被完成。
出現(xiàn)這種錯誤的原因是因?yàn)槲野補(bǔ)ccess連接字符串修改為"Driver={Micorsoft Access Driver ()};dbq=" Server.Mappath(DbPath),而原來的連接字符串為"Provier=Microsoft.Jet.OLEDB.4.0;Data source=" Server.Mappath(DbPath) 時則不會出現(xiàn)這種錯誤??磥磉@兩種連接access數(shù)據(jù)庫的方式還是有一定區(qū)別的。至少后一種連接方式在容錯性上好一些,但很明顯在規(guī)范上是不太正規(guī)的。
為了敘述得簡單,我下面把這兩種方式分別叫做provider連接和driver連接。
上述錯誤在修改新聞時卻不會出現(xiàn)。我看了一下代碼發(fā)現(xiàn)在執(zhí)行添加時,有一個用Excute取得的記錄集未進(jìn)行關(guān)閉。我關(guān)閉了一下也無法正確執(zhí)行。
于是我寫了一段代碼,又另外設(shè)計了一個簡單的表格,發(fā)現(xiàn)這時兩種連接方法可以添加進(jìn)去,于是我又將這段代碼中的表換回原來的,還是不可以執(zhí)行。難道與表有關(guān)?
于是我開始仔細(xì)的研究表格,發(fā)現(xiàn)原表格有一個自動編號字段在程序中被賦值了。我記得自動編號是不可以被賦值的呀。于是我把那個表的自動編號一去,結(jié)果可以正常執(zhí)行。
看來用Provider方式連接是可以對自動編號字段賦值的。
下面說一下另一個地方的區(qū)別。
我使用driver連接時,在頻道設(shè)置時出現(xiàn)了一個Null值,但是實(shí)際上在數(shù)據(jù)庫中是有值的,我看了一下這個字段的數(shù)據(jù)類型,是備注。那是不是說driver驅(qū)動對長的備注支持也不太好呢?不會吧,我那個新聞表中的新聞內(nèi)容一定是備注的呀,應(yīng)該不是這方面的原因。
是什么方面的原因呢?難道是因?yàn)樗俏挥诹硪粋€備注的后面?可是新聞表中也有兩個備注并且內(nèi)容備注也是位于簡介備注的后面呀。這種懷疑也被排除。
是因?yàn)檫@個字段是有關(guān)鍵字的原因?我把這個字段值改為1,結(jié)果也是出錯。
那是什么方面的原因呢?
干脆自己再寫一個頁面測試,測試代碼如下
以下是測試代碼:
復(fù)制代碼 代碼如下:

dim conn
set conn=server.createobject("adodb.recordset")
conn.open "driver={Microsoft access driver (*.mdb)};dbq=" server.mappath("data/dd.mdb") 'driver連接方式
'conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" server.mappath("data/dd.mdb") 'provider連接方式
set rs=conn.execute("select * from s_channel where channelID=11")
response.Write rs("UploadSetting")
rs.close
set rs =nothing

如果發(fā)現(xiàn)兩種連接能正常的輸出。
于是我在原代碼的剛打開記錄集的地方輸出(response.write)了一下,發(fā)現(xiàn)在那個位置可以正常輸出該字段的值。于是我把輸出代碼不停的向下移動,最終移動到
以下是代碼片段:
復(fù)制代碼 代碼如下:

if IsNull(rs("UploadSetting")) or rs("UploadSetting")="" then
UploadSetting=Split("1,2,3,4@Other@2@0@jpg|gif|bmp|png@100@1@swf@500@1@rm|mp3|wav|mid|avi|mpg|mpeg|asf|wma@2048@1@rar|zip|exe|doc|xls|chm@2048@1","@")
else
UploadSetting=Split(rs("UploadSetting"),"@")
end if

放到if上面可以正常的輸出內(nèi)容,但是放到else后面就輸出Null什么原因呢?
于是最終的測試代碼如下
以下是測試代碼:
復(fù)制代碼 代碼如下:

dim conn
set conn=server.createobject("adodb.recordset")
conn.open "driver={Microsoft access driver (*.mdb)};dbq=" server.mappath("data/dd.mdb") 'driver連接方式
'conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" server.mappath("data/dd.mdb") 'provider連接方式
set rs=conn.execute("select * from s_channel where channelID=11")
response.Write rs("UploadSetting")
if IsNull(Rs("UploadSetting")) or rs("UploadSetting")="" then
response.Write "dd"
else
response.Write rs("UploadSetting")
end if

rs.close
set rs =nothing

以上代碼,在使用provider方式連接時,能正確輸出rs("uploadSetting")中的值,而在Driver方式下則什么也不輸出。

我們是不是可以這么理解:就是在Driver方式下,對備注內(nèi)容的引用只能有一次,而再次引用時則變?yōu)镹ULL值。而Provider則不會出現(xiàn)這種情況。

對于這種情況的適應(yīng),我們只能是通過一個變量。讓備注字段的內(nèi)容先給一個變量,而不是直接引用。

標(biāo)簽:蚌埠 廣元 棗莊 萍鄉(xiāng) 江蘇 衡水 大理 衢州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《asp Driver和Provider兩種連接字符串連接Access時的區(qū)別》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266