一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP教程 - asp Driver和Provider兩種連接字符串連接Access時的區別

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

2019-09-06 11:23asp之家 ASP教程

Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e21' 多步 OLE DB 操作產生錯誤。如果可能,請檢查每個 OLE DB 狀態值。沒有工作被完成。

一個網站程序,在添加新聞時出現錯誤 
以下是錯誤提示: 
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e21' 
多步 OLE DB 操作產生錯誤。如果可能,請檢查每個 OLE DB 狀態值。沒有工作被完成。 
出現這種錯誤的原因是因為我把access連接字符串修改為"Driver={Micorsoft Access Driver ()};dbq=" & Server.Mappath(DbPath),而原來的連接字符串為"Provier=Microsoft.Jet.OLEDB.4.0;Data source=" & Server.Mappath(DbPath) 時則不會出現這種錯誤。看來這兩種連接access數據庫的方式還是有一定區別的。至少后一種連接方式在容錯性上好一些,但很明顯在規范上是不太正規的。 
為了敘述得簡單,我下面把這兩種方式分別叫做provider連接和driver連接。 
上述錯誤在修改新聞時卻不會出現。我看了一下代碼發現在執行添加時,有一個用Excute取得的記錄集未進行關閉。我關閉了一下也無法正確執行。 
于是我寫了一段代碼,又另外設計了一個簡單的表格,發現這時兩種連接方法可以添加進去,于是我又將這段代碼中的表換回原來的,還是不可以執行。難道與表有關? 
于是我開始仔細的研究表格,發現原表格有一個自動編號字段在程序中被賦值了。我記得自動編號是不可以被賦值的呀。于是我把那個表的自動編號一去,結果可以正常執行。 
看來用Provider方式連接是可以對自動編號字段賦值的。 
下面說一下另一個地方的區別。 
我使用driver連接時,在頻道設置時出現了一個Null值,但是實際上在數據庫中是有值的,我看了一下這個字段的數據類型,是備注。那是不是說driver驅動對長的備注支持也不太好呢?不會吧,我那個新聞表中的新聞內容一定是備注的呀,應該不是這方面的原因。 
是什么方面的原因呢?難道是因為他是位于另一個備注的后面?可是新聞表中也有兩個備注并且內容備注也是位于簡介備注的后面呀。這種懷疑也被排除。 
是因為這個字段是有關鍵字的原因?我把這個字段值改為1,結果也是出錯。 
那是什么方面的原因呢? 
干脆自己再寫一個頁面測試,測試代碼如下 
以下是測試代碼: 

復制代碼代碼如下:


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 


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

復制代碼代碼如下:


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上面可以正常的輸出內容,但是放到else后面就輸出Null什么原因呢? 
于是最終的測試代碼如下 
以下是測試代碼: 

復制代碼代碼如下:


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方式下,對備注內容的引用只能有一次,而再次引用時則變為NULL值。而Provider則不會出現這種情況。 

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: free性丰满hd性欧美人体 | 国产午夜精品久久久久小说 | 男gaygays免费网站多人 | chinses台湾男同志hd | 91桃色视频在线观看 | 手机在线免费观看日本推理片 | 欧美一区二区不卡视频 | 国产suv精品一区二区四区三区 | 五月香婷婷| 亚洲国产精品综合一区在线 | www免费看| 日韩影院在线 | 麻生希在线观看 | 国产伦精品一区二区三区免费观看 | 欧美18~20性hd| 久久内在线视频精品mp4 | 操动漫美女视频 | 俄罗斯妈妈235 | 四虎最新永久免费网址 | 亚洲第一网色综合久久 | 免费一区在线 | 国产精品www夜色影视 | 天堂男人在线 | 97就去干| 免费视频 久久久 | 国产短视频精品一区二区三区 | 日本精品vide·ssex日本 | 国产美女久久久久 | 日本一片免费观看高清完整 | 三星w699 | blackedhd 18sex| 丝瓜视频看污片 | 五月天精品在线 | 欧美另类videos另类粗暴 | 免费看一区二区三区 | 9191精品国产观看 | 免费国产在线视频 | 欧美在线成人免费国产 | 法国女佣系列在线播放 | 国产激情在线 | 久久99精品久久久久久园产越南 |