asp Driver和Provider两种连接字符串连接Access时的区别

所属分类: 网络编程 / ASP编程 阅读数: 1629
收藏 0 赞 0 分享
一个网站程序,在添加新闻时出现错误
以下是错误提示:
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则不会出现这种情况。

对于这种情况的适应,我们只能是通过一个变量。让备注字段的内容先给一个变量,而不是直接引用。
更多精彩内容其他人还在看

asp知识整理笔记4(问答模式)

这是关于asp知识整理的最后一份笔记,希望大家仔细阅读。
收藏 0 赞 0 分享

ASP基础知识VBScript基本元素讲解

这篇文章主要介绍了ASP基础知识VBScript基本元素的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

ASP编码和解码函数详解

这篇文章主要介绍了ASP编码和解码函数的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

ASP显示页面执行时间的方法

这篇文章主要介绍了ASP显示页面执行时间的方法,在本地测试一下输出页面需要多少时间,需要的朋友可以参考下
收藏 0 赞 0 分享

ASP基础入门第一篇(ASP技术简介)

本文将以 Active Server Pages 为中心,向你全面展示制作动态商业网站的步骤和技巧并通过大量的实例,让你在不断的理论和实践之中笑傲“网络”……
收藏 0 赞 0 分享

ASP基础入门第二篇(ASP基础知识)

这篇文章是ASP基础入门第二篇,第一篇展示了ASP动态网站设计的一些最基本的方法,相信通过实践各位对 ASP 已经有了最基本的了解,本文将进一步介绍ASP动态网站的一些基本技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

ASP基础入门第三篇(ASP脚本基础)

通过前两篇的学习,相信各位已经对 ASP 的动态网站设计有了一个基本的概念和整体的印象。从本篇开始作者将从脚本语言的使用着手,由浅入深地带领大家探索 ASP 动态网站设计的真正奥秘。
收藏 0 赞 0 分享

ASP基础入门第四篇(脚本变量、函数、过程和条件语句)

大家在学习了脚本语言 VBScript 的变量、常量和过程的基本概念后,本期将继续向各位介绍 VBScript 的函数和语法。
收藏 0 赞 0 分享

ASP基础入门第五篇(ASP脚本循环语句)

在本文上两篇中,我们学习了脚本语言 VBScript 的变量、函数、过程和条件语句,本篇将继续给大家介绍 VBScipt 的循环语句,并对脚本语言在 ASP 中的应用加以总结。  
收藏 0 赞 0 分享

ASP基础入门第六篇(ASP内建对象Request)

从本篇开始作者从 ASP 内建对象着手,为大家详细剖析 ASP 的六个内建对象和各种组件的特性和方法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多