ADODB.Recordset错误'800a0bb9':参数类型错误

时间:2011-12-08 09:21:56

标签: asp-classic

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

上面的代码是经典的asp。

我收到以下错误:

  

ADODB.Recordset错误'800a0bb9'
  参数类型错误,超出可接受的范围,或彼此冲突。

Dows有人知道导致此错误的原因以及如何修复它?

5 个答案:

答案 0 :(得分:14)

最相似的原因是您没有包含“ADOVBS.INC”或等效的META: -

<!--METADATA
TYPE="TypeLib"
NAME="Microsoft ActiveX Data Objects 2.6 Library"
UUID="{00000206-0000-0010-8000-00AA006D2EA4}"
VERSION="2.6"
-->

因此adxxxx常量不存在。但是,您的主要错误不是在脚本的顶部包含Option Explicit。这样可以节省大量的时间来寻找愚蠢的错误和拼写错误。

BTW如果ATTUserDataID包含“0; DELETE ATTJournals”,会发生什么? ?
避免使用像瘟疫这样的连接来编写SQL。搜索“ASP SQL注入”以查找使用参数化命令对象的示例。

答案 1 :(得分:0)

首先,当我使用vbscript编写应用程序时,我总是使用数字来打开记录集。我建议按照以下行:

rsPlanID.Open strSQL, m_objConn, 3, 3

确保首先包含文件adovbs.inc。这些数字与不同类型的记录集属性相关联。并且不要首先打开数据库连接。

其次,我认为你不需要这一行

rsPlanID.CursorLocation = adUseClient 

三,请参阅this thread。也许这对你来说是一个很好的模板。

答案 2 :(得分:0)

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

strSQL = "SELECT PlanID FROM ATTJournals WHERE ATTUserDataID = " & ATTUserDataID 
Set rsPlanID = m_objConn.Execute(strSQL)

此外,您的代码对于SQL注入攻击是敞开的 - 您最好了解它并更改代码以使用参数。

答案 3 :(得分:0)

我觉得我在整个互联网上搜索并且无法找到解决这个问题的方法,就像我即将放弃一样,我意识到我已经在一个&#34中声明了我的连接变量;如果& #34;声明,因为if语句没有执行,我的命令也没有给出数据库中的错误,如你的问题所述。

答案 4 :(得分:-1)

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