解决Access数据库出现0x80004005问题的方法

这篇论坛文章着重介绍了Access数据库出现0x80004005问题的解决方法,更多内容请参考下文:

这篇论坛文章着重介绍了Access数据库出现0x80004005问题的解决方法,更多内容请参考下文:

项目做了三个月了,终于也差不多完成了,昨天交去测试,结果出现了下面这样的问题:


[OleDbException (0x80004005): Unspecified error]

System.Data.OleDb.OleDbConnection.ProcessResults(Int32 hr) +20

System.Data.OleDb.OleDbConnection.InitializeProvider() +57

System.Data.OleDb.OleDbConnection.Open() +203

Webb.WAVE.Controls.OleDBManager.FillDataTable(DataTable i_dataTable) +85

Webb.WAVE.Controls.WaveExpire.LoadExpireDateForClient(DataTable i_table, Int64 i_clientID) +189

Webb.WAVE.inc_Client_AccessManage.LoadExpireDate(String i_sortKey) +99

Webb.WAVE.inc_Client_AccessManage.Page_Load(Object sender, EventArgs e) +85

System.Web.UI.Control.OnLoad(EventArgs e) +67

System.Web.UI.Control.LoadRecursive() +35

System.Web.UI.Control.LoadRecursive() +98

System.Web.UI.Control.LoadRecursive() +98

System.Web.UI.Page.ProcessRequestMain() +750

说明一下:这个错误总会在运行一段时间后出现,而等一会工(不定多少时间),或者重新启动IIS或者服务器,这个问题就解决了。而再运行一会又会(时间越来越短)出现这个问题。

而我在自己的电脑是运行时,基本上没出现这样的问题,于是反复的查找原因,不得其解,在MSDN里找到了三篇相关的文章:其中这一篇还有点道理:

SYMPTOMS

When trying to connect to an Access .mdb file, an ODBC error is returned stating "Disk or Network Error". The Microsoft OLE DB Provider for the Microsoft Jet database engine may also return an "Unspecified error" (error code = 0x80004005) message.

The problem can occur only when the data source is opened under the Microsoft Internet Information Server (IIS) or a Microsoft Windows NT service but not under a logged-on user account.CAUSE

Jet creates a temporary file when the engine is started. In doing so, it first checks the TMP environment variable and uses that path to define where the temporary file is created. If it doesn't see a TMP environment variable, it looks for the TEMP environment variable. If TEMP is not defined, it then uses the Windows folder (\WINDOWS or \WINNT).

If TMP/TEMP is defined but points to a nonexistent folder, the error occurs.

Moreover, when opening the Access database through IIS or a Windows NT service, and when IIS or the service is running under the local system account, the TMP or TEMP system environment variable is used. When the Web services or Windows NT service are started using a user account, the TMP/TEMP user profile environment variables is used.RESOLUTION

Define a TMP or TEMP environment variable and assign the variable to an existing folder. If you are accessing the Access database from IIS, be certain to check the system environment settings rather than environment variables of the logged-on user. Also ensure that the IUSER anonymous IIS account has access to the temporary folder.

You must restart the computer after changing any environment variables.

Environment variables are set under Windows NT 4.0 by going to the Control Panel and clicking System and then selecting the Environment tab.

然而我不解的是,为什么在前几个星期的测试中没有这个问题,而在最近几天,出现的越来越频繁呢?

在网上找了几篇相关的文章(有好多论坛上的帖子也有讨论这个问题的,但我没能找到解决答案):

思考几小时间后,我想会不会是不能建立临时文件的原因呢?其实只要能让错误在我自己的电脑上出现,那我就好办了,但问题是,只是偶而出现在我的电脑上,而且很快就好了,从头到尾都只出现过两三次。但在服务器上却出现问题越来越多了,几分钟就不行了。根据前面的一些文章来分析,我决定做以下一个测试:

1、删除IIS在Windows下的帐号(Internet Guest Account)的文件写权限当然,只对项目的目录。

2、同时也删除它在临时目录(C:\Documents and Settings\WEBB-COUNTRY-WU\ASPNET\Local Settings\Temp,不的机器所有不同)的写权限。

好了,终于在我的电脑上也出现了同样的错误,而且所有的与数据库相关的页面都不能访问。而且根据MSDN里的说明,这是因为没有权限在临时目录里写文件而产生的,与之相同。然而,问题又在于,服务器上的并不是一直错误,而是一时错误一时正常。

唯一可以解释的就是服务器临时文件满了!!!!而这又不好证明,我不可能一直测试,让我的临时文件也满了(就算是COPY文件到临时目录里,也不能算是IIS帐号的,而是操作者的),而且临时文件它自己(OLEDB的链接线程)也会删除的。只好另外想办法,就是用磁盘配额。给IIS帐号:Internet Guest Account在C盘只有10K的写权限,然后测试,果然问题如期而致。。。。。。

到此,可以肯定:服务器上的临时文件太多了,看来是要重新启动一下服务器,或者要清理临时文件或者调整磁盘空间了……

希望这篇文章能帮助那些还没有解决问题的人。同时,MS网站及MSDN上的几篇文章也都还很有帮助意义的,特别是说明的其它几个错误原因。

时间: 2025-01-21 00:12:47

解决Access数据库出现0x80004005问题的方法的相关文章

解决Access数据库被恶意下载的方法

关于防止mdb 被下载,方法挺多了,什么怪异名称,使用odbc数据源,还有改后缀名等等,相信大家都很清楚了.可能这篇文章对你的用处不是很大,但是还是可以让一些初学者学到一些东西,例如 iis 的一些机制! 在iis 站点的属性里面有个"主目录"标签,里面有个"应用程序设置" 的"配置",主要是配置iis服务器里面相对后缀名的文件的处理引擎,例如:.ASP 的文件的处理引擎是:C:WINNTSystem32inetsrvASP.dll,在客户端向i

解决ASP数据库对象为只读的方法

对象|解决|数据|数据库 在windows+iis服务器上运行asp程序可能会出现数据库无法更新的情况,具体错误信息可能为: 1.Microsoft JET Database Engine (0x80040E09) 不能更新.数据库或对象为只读 2.Microsoft OLE DB Provider for ODBC Drivers (0x80004005)[Microsoft][ODBC Microsoft Access Driver] 操作必须使用一个可更新的查询. 3.Microsoft

Access数据库被损坏的修复方法

Access数据库被损坏主要分为以下几种情况:1.严重损坏:2.轻度损坏:3.有些表被损坏或有些表的部分记录被损坏.下面就分情况介绍解决办法. Access数据库被损坏主要分为以下几种情况:1.严重损坏:2.轻度损坏:3.有些表被损坏或有些表的部分记录被损坏.下面就分情况介绍解决办法. 1.使用Access97打不开数据库.系统提示"不可识别的数据库格式"或"不是该表的索引"等信息,这样的数据库都是损坏比较严重的.损害严重的数据库一般来说都是无法修复的,只有恢复备份

将Access数据库转换成Mssql案例方法

http://www.aliyun.com/zixun/aggregation/11208.html">Microsoft Office Access(前名 Microsoft Access)是由微软发布的关联式数据库管理系统.它结合了 Microsoft Jet Database Engine 和 图形用户界面两项特点,是 Microsoft Office的成员之一. Access能够存取 Access/Jet.Microsoft SQL Server.Oracle(甲骨文软件公司),或

VB6实现连接Access数据库的ADODB代码实现方法_vb

本文实例讲述了使用ADODB.Connection连接access数据库的方法,驱动类型版本为:Microsoft.Jet.OLEDB.4.0.在VB的数据库操作中,连接数据库是第一步,也是最基本的,本文所述的这个例子,对于初学者学习如何在VB中连接Access数据库有着很好的借鉴参考价值. 具体实现代码如下: VERSION 5.00 Begin VB.Form 操作数据库 Caption = "VB操作数据库" ClientHeight = 3645 ClientLeft = 49

Access数据库在线压缩的实现方法

如果在 Access 数据库中删除数据或对象,或者在 Access 项目中删除对象,Access 数据库或 Access 项目可能会产生碎片并会降低磁盘空间的使用效率.压缩 Access 数据库或Access项目实际上是复制该文件,并重新组织文件在磁盘上的存储方式.压缩同时优化了 Access 数据库和 Access 项目的性能. 所以我们在对日益增大的数据库导致的ASP程序慢得无法忍受的时候,就想到了要压缩他.但常规的做法把他下载到本地然后用MSaccess来完成压缩操作,然后再上传! 需要注

Access数据库成功导入Oracle库方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 这几天在做一个网站项目时需要把Access数据库中一个表导入Oracle库中,查了一下,现在有很多网页设计教程中给出了解决方案,但并不详细,如果照着做不能成功,现给出已成功导入的详细解决方案. 如下: 首先打开 控制面板-管理工具-数据源 (ODBC),添加一个数据源驱动程序为Oracle的用户DNS,并添入Data Source.Serve

解决Access数据库 不可识别的数据库格式 ***.accdb

2003版本的Access数据链接字符串:              string dataBasePath = @"C:/Users/user/Documents/Test.mdb";            string connectionString = "provider=microsoft.jet.oledb.4.0;Data Source=" + dataBasePath + ";";     2007版本的Access数据链接字符串

用javascript连接access数据库的方法_javascript技巧

刚看到一个朋友写的用javascript连接excel数据库的程序,想把它改成access数据库的,就找到了这两篇文章 ------------------------------------------    这几天费了挺大力气在网上查找javascript连接access数据库的方法, 经过整理总结,终于写出一段能够有效执行的代码.     但是这段代码在本地可以正常运行,一旦放到免费个人空间上就没法执 行了,主要原因就是操作权限不够,由于只支持静态页面的免费空间多数都 作了非常严格的限制,