Asp classic ADODB.记录集错误';800a0bb9';:参数的类型错误

Asp classic ADODB.记录集错误';800a0bb9';:参数的类型错误,asp-classic,Asp Classic,上面的代码是经典的asp 我得到以下错误: ADODB.记录集错误“800a0bb9” 参数类型错误、超出可接受范围或相互冲突 有人知道这个错误的原因以及如何修复吗?首先,当我用vbscript开发应用程序时,我总是使用数字来打开记录集。我推荐以下几行: Set rsPlanID = Server.CreateObject("ADODB.Recordset") rsPlanID.CursorLocation = adUseClient strSQL = "SELECT PlanID FROM

上面的代码是经典的asp

我得到以下错误:

ADODB.记录集错误“800a0bb9”
参数类型错误、超出可接受范围或相互冲突


有人知道这个错误的原因以及如何修复吗?

首先,当我用vbscript开发应用程序时,我总是使用数字来打开记录集。我推荐以下几行:

Set rsPlanID = Server.CreateObject("ADODB.Recordset")
rsPlanID.CursorLocation = adUseClient

strSQL = "SELECT PlanID FROM ATTJournals WHERE ATTUserDataID = " & ATTUserDataID 
rsPlanID.Open strSQL, m_objConn, adOpenStatic, adLockOptimistic

If Not rsPlanID.EOF Then
    response.Write "New PlanID:"  & rsPlanID("PlanID")
End If
确保首先包含文件adovbs.inc。这些数字连接到不同类型的记录集属性。并且不要先打开数据库连接

第二,我想你不需要排队

rsPlanID.Open strSQL, m_objConn, 3, 3

第三,另见。也许这对你来说是一个很好的模板。

最相似的原因是你没有包括“ADOVBS.INC”或等效元:-

rsPlanID.CursorLocation = adUseClient 

因此,
adxxxx
常量不存在。但是,您的主要错误是未在脚本顶部包含
Option Explicit
。这将节省你大量的时间去寻找愚蠢的错误和打字错误

顺便问一下,如果
ATTUserDataID
包含“0;删除ATTJournals;”,会发生什么情况?

避免像瘟疫一样使用连接编写SQL。搜索“ASP SQL Injection”以查找使用参数化命令对象的示例。

除非需要在记录集中来回导航,否则只需使用默认设置:

<!--METADATA
TYPE="TypeLib"
NAME="Microsoft ActiveX Data Objects 2.6 Library"
UUID="{00000206-0000-0010-8000-00AA006D2EA4}"
VERSION="2.6"
-->
此外,您的代码对SQL注入攻击非常开放—您最好了解它,并将代码更改为使用参数。

Function SQL\u getRecordset(strQuery)
strSQL = "SELECT PlanID FROM ATTJournals WHERE ATTUserDataID = " & ATTUserDataID 
Set rsPlanID = m_objConn.Execute(strSQL)
'出现错误时,请继续下一步 '创建数据库连接对象 设置objConnection=CreateObject(“ADODB.Connection”) '创建记录集对象 Set objrecordset=CreateObject(“ADODB.Recordset”) '指定连接字符串 strConnectionstring=“Provider=SQLOLEDB.1;数据源=**;初始目录=**;集成安全性=SSPI” objConnection.Open strConnectionstring '执行查询 Set objrecordset=objConnection.Execute(strQuery) '返回记录集 Set SQL\u getRecordset=objrecordset '从内存中释放对象 Set objConnection=Nothing Set objrecordset=Nothing 端函数
我觉得我搜索了整个互联网,找不到解决这个问题的方法,就在我即将放弃的时候,我意识到我已经在一个“If”中声明了我的连接变量语句,并且由于if语句未执行,因此我对数据库的命令也未执行,并给出您的问题中提到的错误。

您能将其放在global.asa中吗(即一个位置,而不是数百个.asp文件)?@NealWalters是的,事实上我强烈推荐它。
Function SQL_getRecordset(strQuery)

'On Error Resume Next
 'Create Database connection object
  Set objConnection = CreateObject("ADODB.Connection")

  'Create Recordset object
  Set objrecordset = CreateObject("ADODB.Recordset")

  'Specify the connection string
  strConnectionstring = "Provider=SQLOLEDB.1;Data Source=*<Server name>*;Initial Catalog=*<database>*;Integrated Security=SSPI"
  objConnection.Open strConnectionstring

  'Execute the Query
  Set objrecordset = objConnection.Execute(strQuery)

  'Return Recordset
  Set SQL_getRecordset = objrecordset

  'Release objects from the memory
  Set objConnection = Nothing
  Set objrecordset = Nothing

End Function