网络编程
位置:首页>> 网络编程>> Asp编程>> asp Driver和Provider两种连接字符串连接Access时的区别

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

 来源:asp之家 发布时间:2011-03-09 11:19:00 

标签:asp,Driver,Provider,连接字符串连

一个网站程序,在添加新闻时出现错误

以下是错误提示: 

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则不会出现这种情况。

对于这种情况的适应,我们只能是通过一个变量。让备注字段的内容先给一个变量,而不是直接引用。

0
投稿

猜你喜欢

  • 所以对应的asp处理代码如下代码如下:dedearr=split(xiangguanid2,chr(13)) '分割成数组
  • 最近,就“尊重”一词,个人小有感概。也许跟我说“尊重”一词的同事并不是这么想的,但我反思了一下自己,作为一名设计师,确实存在这些疑问(不足之
  • CacheControl 属性设置是否可缓存由 ASP 生成的输出。默认地,代理服务器不会保持缓存副本。语法:response.CacheC
  • 图片的宽度和高度是未知的,没有一个固定的尺寸,在这个前提下要使图片在一个固定了宽度和高度的容器中垂直居中,想想感觉还是挺麻烦的,由于最近的项
  • 使用 WinHttpRequest 伪造 HTTP 头信息,伪造 Referer 等信息。由于微软封锁了 XmlHttp 对象,所以无法伪造
  • 阅读上一章:chapter 5 表单Chapter 6 <strong>,<em>与其他短语元素在引言和前面的章节中
  • [参与测试的浏览器:IE6 / IE7 / IE8 / FF3 / OP10 / SF4 / Chrome2 ][操作系统:Windows]
  • 【MySql常用命令】1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql> SHOW DATABASES;2:创建一个数
  • 正确使用字体和颜色可以让网页内容更易阅读,下面我们来看看具体的优化措施。留意颜色的对比对于视力不太好的人或者对于不太好的显示设备来说,黑地白
  • 报表服务器数据库可以为一个或多个报表服务器实例提供内部存储。因为报表服务器数据库架构可能会因为推出新的 Reporting Services
  • 清除浮动一个凡是做页面的人都会遇到的一个东西,但是是否大家都能够清楚的知道,全方位的了解呢?于是一闲下来了马上写了这样的一篇文章,不能讲面面
  • 为了防止某些别有用心的人从外部访问数据库,盗取数据库中的用户姓名、密码、信用卡号等其他重要信息,在我们创建数据库驱动的解决方案时,我们首先需
  • 在支持FSO的情况下,可以显示本站内的所有ASP页面的代码适用于代码演示时在效果页面上直接显示该页面的代码而不用再对代码制作专门的页面使用方
  • 概 述  现在有不少介绍利用ASP实现动态分页的文章,方法大同小异,就是每次利用ADO返回原始数据满足条件记录集中的指定
  • 我们经常见到很多网站留言系统的显示访客的IP地址都是隐藏了一部分,以达到隐蔽访客真实地理位置的功能。如:111.222.333.*,当然在系
  • 在用wordpress这个博客的时候,我很奇怪的发现,最近写的内容排在第一页,而最早写的成了最后页。这显然有悖逻辑,正常的情况应该是最早写的
  • Asp中Server.ScriptTimeOut属性需要注意的一点Server.ScriptTimeout  这个属性给定Asp脚
  •  <%''调用例子'Dim int_RPP,int_Start,int_showNumberLink
  • 在第一章,我们讲过position,当它取值absolute的时候,即绝对定位。既然是定位,就要有参照物。一般来讲,这个定位的参照物是bod
  • 在SQL Server Management Studio 用WINDOWS连接的情况下改实列的&ldquo;属性&rdqu
手机版 网络编程 asp之家 www.aspxhome.com