服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - ASP教程 - ASP常见错误详解及解决方案小结

ASP常见错误详解及解决方案小结

2019-08-31 09:47ASP之家 ASP教程

ASP是非常简单的,以至于许多的开发者不会去思考错误处理。错误处理能够让你的应用程序更加合理。我看到过很多个用ASP编写的商业网站,大多数都忽略了错误处理。 错误的类型。

有三种主要的错误类型:

1.编译错误:

这种错误出现一般都是代码的语法问题。因为编译错误而导致辞ASP停止运行。

2.运行错误:

这个错误是发生在你准备运行ASP时的。例如:如果你试图给一个变量赋值,但是却超出了该变量允许的范围。

3.逻辑错误:

逻辑错误是最难被发现的,这种错误经常是一种结构错误,电脑是发现不了的。这就需要我们彻头彻尾地检查我们的代码。

因为编译错误一般是和逻辑错误一起发生的,一般都能显示出来,所以我们担心的就只是运行错误。它都终止ASP的运行,而且给用户丢下一堆很不友好的文字。 那么我们要怎样处理运行错误呢?

错误类型:

ADODB.Field (0x800A0BCD)

BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。

原因:你在利用SQL查找数据库的记录时,查找结果为空,而且你没有对空记录的情况做出处理。

解决:1 如果你不相信查找结果为空,那你应该考虑你的SQL语句是否正确;2 如果确实有空的情况,那你应该添加”if rs.eof then”或者”do while not rs.eof”之类的语句,对eof的情况进行处理。

错误类型:

(0×80020009)

发生意外。

原因:也是在利用SQL查找数据库记录时,查找结果为空,而且你在后面的代码中调用了rs(“aa”)之类的记录

解决:要么同上,加上rs.eof的判断和处理,要么就是你的SQL语句有误,导致记录查不出来,也就无法在后来使用rs(“aa”)的记录了。

错误类型:

Active Server Pages, ASP 0126 (0×80004005)

找不到包含文件 ‘xxx.asp'。

原因:就如错误提示所说,不存在这个包含文件。

解决:如果你确定有这个文件,那么就是你的路径写错了,比如说其实他相对于网站根目录的路径应该是inc/xxx.asp,那么include里面就应该写inc/xxx.asp,而不仅仅是xxx.asp。附:include的写法是:

错误类型:

Microsoft OLE DB Provider for ODBC Drivers (0×80004005)

[Microsoft][ODBC Microsoft Access Driver] 操作必须使用一个可更新的查询。

原因:这个在XP服务器上非常常见,属于服务器的配置问题,或者说是用户的权限问题。

解决:如果仅仅是在本机上调试出现的错误,则右键点击网站所在的文件夹,点击”共享和安全…”,在”安全”中点添加…,写入everyone,然后再使这个用户的权限为所有,即除了第一个外全部打勾,确定之后再刷新就可以用了。(注:如果找不到“安全”选项,则在任意一个文件夹下点击“工具”,然后是“文件夹选项”--“查看”,在“使用简单文件共享”一栏把勾去掉即可)

错误类型:

Microsoft VBScript 编译器错误 (0x800A0401)

语句未结束

原因:语法错误。

解决:按系统所提示的行来检查。如果提示的恰好是本页的最后一行,则很有可能是if语句忘记写”end if”啦,select语句忘记写”end select”啦,总之是需要end的地方没有end,导致服务器找不到语句的结尾,只好在最后一行显示错误。

错误类型:

Microsoft JET Database Engine (0x80040E10)

至少一个参数没有被指定值。

原因:在写SQL语句的时候,我们经常会调用一些参数,很可能这些参数中有一个没有被赋值。

解决:检查每一个参数的值是否真的传递过来了,很可能有些参数其实是”",这样的参数去索引数据库当然是不行的。

错误类型:

Microsoft JET Database Engine (0x80040E37)

Microsoft Jet 数据库引擎找不到输入表或查询 ‘AA'。 确定它是否存在,以及它的名称的拼写是否正确。

原因:不存在这个表。

解决:应该是你写错了表名,或者连错了数据库?再仔细核对一下吧!

错误类型:

Microsoft VBScript 运行时错误 (0x800A000D)

类型不匹配: \'[string: ""]\”

原因:是因为你的变量的类型是字符串型的,而你却当作数字或者其他类型来使用。

解决:比如你需要数字的变量用来计算i=i+1等数学运算,那么应该在变量上使用cint(变量名),强制转换为数字型,两个变量之间作比较也一定要是相同的类型,因此也需要转换,方法同上。

错误类型:

Microsoft JET Database Engine (0x80040E07)

标准表达式中数据类型不匹配。

原因:一般也是在写SQL语句时发生了错误,即把数字型和字符串型的变量混淆了。

解决:很好办,试一试把SQL中变量加了”的去掉单引号,或者把原先认为是数字的加上”,再查看效果。

错误类型:

Microsoft VBScript 运行是错误(0x800A01A8)

缺少对象:”

原因:很有可能是你没有对rs对象进行定义。

解决:别忘了写set rs=server.CreateObject(“adodb.recordset”),这样可以定义对象;或者直接不用这种写法,直接用conn.execute(“SQL”)这样会方便得多,也不用考虑对象问题。

错误类型:

Microsoft VBScript 运行时错误 (0x800A005E)

无效使用 Null: ‘Replace'

原因:无效使用函数的情况也比较多见,包括Split等,这个道理也比较简单,就是因为你Replace的内容是空的。

解决:最好加一句IF检验一下你要replace的内容是否为空。

Microsoft VBScript 编译器错误 错误 '800a03f6′

ODBC 驱动程序不支持所需的属性。

原因:可能是因为没有sql语句里出现的字段名,一般为字段名或sql关键字书写错误。也有可能是sql所要打开的表已经被独占打开。

解决方法:检查sql语句里出现的每个字段名,和每个关键字

Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005′

机器 ‘HDZC-3JQSKBWO02′ 上的用户 ‘Admin' 以独占方式的锁定数据表'order_detail'。

原因:sql所需的表被access以表设计形式打开着

解决方法:关闭表设计

Microsoft VBScript 编译器错误 错误 '800a03f6′

在对应所需名称或序数的集合中,未找到项目。

原因:没有sql语句里出现的字段名,一般为字段名或sql关键字书写错误

解决方法:检查sql语句里出现的每个字段名

ADODB.Recordset 错误 '800a0e78′

对象关闭时,不允许操作。

原因:在rs.open sql,conn,3,3语句之前使用了rs.close关闭了rs对象

解决方法:去掉之前的rs.close

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14′

[Microsoft][ODBC Microsoft Access Driver] 语法错误 (操作符丢失) 在查询表达式 ‘oid form classtree where oid = 25′ 中。

原因:在sql语句中存在非法书写的英文关键字或子段错误

解决方法:把sql语句打出来,然后逐个单词对照,查找出书写的错误

操作要求一个可更新的查询

答:看看库文件是不是只读了。

答2:经过排序(order by) 的记录集(rs)不允许有更新操作(rs.update)

3219 操作在该内容中不被允许

答3:数据库字段属性是否设置为允许空值插入。

adErrInvalidArgument 3001

0x800A0BB9

应用程序使用的参数其类型错误、超出可接受的范围或者与其他参数冲突。

adErrNoCurrentRecord 3021

0x800A0BCD

BOF 或 EOF 为 True,或者当前记录已经删除。应用程序请求的操作需要当前记录。

adErrIllegalOperation 3219

0x800A0C93

应用程序请求的操作不允许出现在该上下文中

adErrInTransaction 3246

0x800A0CAE

在事务中应用程序无法显式关闭 Connection 对象。

adErrFeatureNotAvailable 3251

0x800A0CB3

提供者不支持应用程序请求的操作。

adErrItemNotFound 3265

0x800A0CC1

ADO 无法在对应于应用程序请求的名称或顺序引用的集合中找到对象。

adErrObjectInCollection 3367

0x800A0D27

无法追加,对象已经在集合中。

adErrObjectNotSet 3420 0x800A0D5C 应用程序引用的对象不再指向有效的对象。

adErrDataConversion 3421

0x800A0D5D

应用程序使用了不符合对当前操作的值类型。

adErrObjectClosed 3704

0x800A0E78

如果对象关闭,则不允许应用程序请求的操作。

adErrObjectOpen 3705

0x800A0E79

如果对象打开,则不允许应用程序请求的操作。

adErrProviderNotFound 3706

0x800A0E7A

ADO 找不到指定的提供者。

adErrBoundToCommand 3707

0x800A0E7B

应用程序无法用 Command 对象将 Recordset 对象的 ActiveConnection 属性更改为它的来源数据。

adErrInvalidParamInfo 3708

0x800A0E7C

应用程序错误地定义了 Parameter 对象。

adErrInvalidConnection 3709

0x800A0E7D

应用程序通过引用关闭或无效的 Connection 对象来请求对对象的操作。

ADODB.Field 错误 '80020009′ BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。

解决如下:这个错误是因SELECT、DELETE的记录不存在,或者库中没有记录所引起的,所以检查SQL语句,SELECT、DELETE的条件是否正确,还有在DELETE前最好SELECT一个记录或者用On Error Resume Next…….On Error Goto 0来处理。如果是因为库中没记录,只要加个判断If objRecordSet.Eof And objRecordSet.Bof Then就可以了,因为打开RecordSet时,指针默认是指在最面的,所以可以只用If objRecordSet.Eof Then来判断

ActiveServerPages,ASP0126(0×80004005)–>找不到包含文件

MicrosoftOLEDBProviderforODBCDrivers(0x80040E21)–>sql语句出错(数据类型不匹配或表名(字段名)错误或表处于编辑状态,或表不存在于conn打开的数据库中)

MicrosoftOLEDBProviderforODBCDrivers(0x80040E14)–>sql语句出错(字段名错误,或数据类型不匹配)

MicrosoftOLEDBProviderforODBCDrivers(0x80040E07)–>sql语句出错(要插入或更新的字段的类型与变量数据类型不匹配)

MicrosoftOLEDBProviderforODBCDrivers(0x80040E57)–>sql语句出错(要插入或更新的数据溢出)

MicrosoftOLEDBProviderforODBCDrivers(0x80040E10)–>sql语句出错(update字段名或要更新的数据类型错误)

MicrosoftOLEDBProviderforODBCDrivers(0×80004005)–>sql语句出错(要插入或更新的字段的数值不能为空值)

MicrosoftOLEDBProviderforODBCDrivers(0×80004005) –>打开数据库出错,没有在指定目录发现数据库

MicrosoftOLEDBProviderforODBCDrivers(0x80040E37)–>没有发现表

MicrosoftVBscript运行时错误(0x800A000D)–>错误引用rs变量(rs对像已关闭或未定义)

MicrosoftVBscript运行时错误(0x800A01C2)–>vbscript脚本错误(vbscript语句出错)

MicrosoftVBscript运行时错误(0x800A0006)–>vbscript脚本错误(溢出错误)

MicrosoftVBscript编译器错误(0x800A040E)–>缺少loop

MicrosoftVBscript编译器错误(0x800A03EA)–>缺少if或endif

MicrosoftVBscript编译器错误(0x800A03EE)–> 语句未结束(缺少”)”)

MicrosoftVBscript编译器错误(0x800A03F6)–>if语句出错(缺少endif)

MicrosoftVBscript运行时错误(0x800A005B)–>缺少set

MicrosoftVBscript运行时错误(0x800A0005)–>变量未定义

MicrosoftVBscript编译器错误(0x800A03F9)–>if语句缺少then

MicrosoftVBscript编译器错误(0x800A0411)–>dim语句定义错误

ADODB.Recordset(0x800A0BB9)–>sql语句出错(sql语句或conn语句未定义或对一个rs属性进行赋值时发生错误)

ADODB.Recordset(0x800A0CC1)–>rs对像出错(rs对像本身不存在或错误地引用了一个不存在的字段名)

ADODB.Recordset(0x800A0BCD)–>rs对像出错(记录集中没有记录却对记录集进行操作)

ADODB.Recordset(0x800A0E78)–>rs对像出错(记录集不存在,缺少rs.open语句)

ADODB.Recordset(0x800A0CC1) –>rs对像出错(引用了一个不存在的字段名)

ADODB.Recordset(0x800A0E7D)–>conn定义错误

ADODB.Recordset(0x800A0CB3)–>数据库以只读方式打开,无法更新数据

错误之一:不能在浏览器端显示调试信息,只显示HTTP 500错误。

不出意外的话,只要你开发过Asp程序,绝对会出现这样的错误。出现这样的错误也不要紧,毕竟可以根据浏览器上面显示的错误原因进行解决。但是在Windows 2003 Server + IIS 6.0 下面就只报告“内部服务器错误”,没有具体的信息,让人郁闷的不行。一般来说可以通过如下的配置让IIS启动调试ASP程序(标红的选项打勾),具体见见图1,图2。要出现此配置项,在IIS中你发布的网站(一般为默认网站)上单击右键,选择属性,在弹出的选项中,点主目录,点配置按钮就可以出现如图1,图2的选项。

ASP常见错误详解及解决方案小结

图1 启用父路径

ASP常见错误详解及解决方案小结

图2 启用ASP程序调试

但是很奇怪的是做了这些修改之后,浏览器还是不能正常显示错误信息。一直以为这个是IIS服务器的问题,最后通过多方查找资料,终于发现是Internet Explore的问题。通过作如下的配置就可以正常显示了(按标红的选项修改,默认的勾和下面的图片显示刚好相反)。具体点击Internet Explorer—工具—Internet选项就可出现如下选项页:

ASP常见错误详解及解决方案小结

图3 Internet 选项配置

做了以上的修改之后,一般来说就可以正常显示错误信息了,调试错误时也方便了很多。想我以前在调试时,不知道为什么不能显示出错信息时,只能郁闷的去看日志。。。。。。,那个痛苦啊!

如果运行asp页面出现下面的错误提示

出现:

Active Server Pages 错误 'ASP 0201'

无效的默认脚本语言

为此应用程序指定的默认脚本语言无效。

IIS出现Active Server Pages错误'ASP 0201'的修复工具

2007-05-12 19:08

IIS提示:

Active Server Pages 错误 'ASP 0201'

默认脚本语言无效

为该应用程序指定的默认脚本语言无效。

网上收集的方法有:

方法一

在运行里面regsvr32 /u scrrun.dll

regsvr32 scrrun.dll

另,如果还是不行,可以试试把iis卸载,然后把wwwroot目录删除,重新安装IIS.

方法二

1、删除“internet信息服务”,

2、重启机子,按F8进入“安全模式”,

3、在安全模式下将“C:\Inetpub”、“c:\windows\iis6.log”、“c:\windows\system32\inetsrv”这几个东西重命名。

4、重启机子,在正常模式下安装“internet信息服务”,安装完毕删除重命名文件。

5、如果还不能解决问题,打开“internet信息服务”,“重新启动IIS”。

方法三

( 这个实践过 OK!)

1、单击开始,指向程序,指向管理工具,然后单击 Internet 信息服务。

2、在控制台树中,单击默认 Web 站点。在显示窗格中,右键单击 默认 Web 站点,然后单击属性。

3、在目录安全性选项卡的匿名访问和身份验证控制中,单击编辑。

4、在身份验证方法属性页中,单击去掉匿名访问的勾。

====================

这是一个相当普通的asp错误,一般是由以下原因造成:

在我们使用多种方式去解决这个问题之前,让我们看一下这个错误本身.

像完整的错误消息?任何一个可能导致这个问题的原因都会使我们得到如下消息:

Active Server Pages 错误 'ASP 0201'

错误无效的默认脚本语言

该应用程序地应的默认脚本语言无效

这错误通常是由IIS不识别的"不支持的脚本语言"引起的.现在怎么修复它呢?

尝试以下步骤:

1.确认在IIS中定义了合适的脚本语言.(进入IIS管理-选中站点-属性-主目录-配置-选项-默认ASP语言),确认默认ASP语言设置为 VBscrīpt(默认)或Jscrīpt(如果你更喜欢Javascrīpt脚本)

2.注意如果你的代码中首行含有<%Language="language"%>将覆盖上边的设置,所以仔细检查以保证你没有拼写错误.它应该是<%Language="VBscrīpt"%>

3.有时,脚本引挚不完整的DLL注册也会造成这个问题,请下载最新版的脚本引挚试试。

4.现在,我们需要确认在安装脚本引挚时没有注册某些DLL文件,例如,你可以按以下方式去尝试注册DLL: regsvr32 %windir%\system32\VBscrīpt.dll regsvr32 %windir%\system32\Jscrīpt.dll regsvr32 %windir%\system32\Inetsrv\Asp.dll

5.继续,如果你到此还没有解决这个问题,那看起来像是许可权引起了该问题.

例如:使匿名用户访问网站的 iusr_计算机名 这个用户没有相关DLL的读权限,可以尝试将(4)中的DLL文件给匿名用户赋予读取权限.

6.下一步,如果你还是看到同样的错误,你需要尝试按另外的步骤以确保相关的权限正确.参考以下文件:

IIS 4 - IIS 4所需要的用户和NTFS权限(http://support.microsoft.com/?id=187506)IIS 5 - 怎样为IIS5设置所需要的用户及NTFS权限(http://support.microsoft.com/?id=271071)IIS 6 - IIS6.0默认的用户及NTFS权限(http://support.microsoft.com/?id=812614)

7.如果你严格按照上边的步骤来做,应该不会再看到这个错误,除非你在上边的步骤中遗忘了某些配置.你可以临时将 iusr_计算机名 这个用户加入本地管理员组.注意,这只是为了查找问题,当问题解决后你绝对不能将匿名用户加入管理员组.

如果加入管理员组后问题已经解决.可以肯定这是因为权限问题,请按上边的步骤再次检查权限设置.如果还是没有解决,请将匿名用户从管理员组删除后再请教其它相关专业技术人员.

如果还是无法解决问题。下这个软件运行

延伸 · 阅读

精彩推荐