Asp classic 应用程序对经典asp中的当前操作使用了错误类型的值

Asp classic 应用程序对经典asp中的当前操作使用了错误类型的值,asp-classic,Asp Classic,我使用以下代码调用一个存储过程: m_objCmd.CommandText = "StoredProc_Name" m_objCmd.Parameters.Append m_objCmd.CreateParameter("@UserID", 3, 1, 0, UserID) m_objCmd.Parameters.Append m_objCmd.CreateParameter("@UserTypeID", 3, 1, 0, UserTypeID) m_objCmd.Parameters.Appe

我使用以下代码调用一个存储过程:

m_objCmd.CommandText = "StoredProc_Name"
m_objCmd.Parameters.Append m_objCmd.CreateParameter("@UserID", 3, 1, 0, UserID)
m_objCmd.Parameters.Append m_objCmd.CreateParameter("@UserTypeID", 3, 1, 0, UserTypeID)
m_objCmd.Parameters.Append m_objCmd.CreateParameter("@AccessToken", 202, 1, 100, AccessToken)
m_objCmd.Parameters.Append m_objCmd.CreateParameter("@TokenExpiration", 135, 1, 0, TokenExpiration)
m_objCmd.Parameters.Append m_objCmd.CreateParameter("@RefreshToken", 202, 1, 100, RefreshToken)

rsUserData.Open m_objCmd, , adOpenStatic, adLockReadOnly  
在上文中:

  • @UserID
    是一种“int”数据类型
  • @UserTypeID
    为“int”
  • @AccessToken
    是nVarchar(100)
  • @TokenExpiration
    是数据时间(2)
  • @refreshttoken
    是nVarchar(100)
但这里我得到了一个错误:

应用程序对当前操作使用了错误类型的值


有人能帮我吗。

可能是您的问题中的代码片段不完整,但我希望这一行也能用于您的预期用途:-

 m_objCmd.CommandType = adCmdStoredProc

似乎有溢出或错误的类型。例如,
AccessToken
的长度可能大于100。全部检查。 如果必要,将变量转换为它们的子类型(特别是字符串)。某些第三方组件可能会返回变体,并导致这种情况。i、 e

... ("@AccessToken", 202, 1, 100, CStr(AccessToken))
... ("@UserID", 3, 1, 0, CLng(UserID))
..

几天前我也有同样的问题。正如Kul Tigin在下面建议的那样,我的问题是溢出

我试图插入一个长度超过17000个字符的大字符串,但收到的错误与您的完全相同。然后,我选择将字符串保存在文本文件中,并将该表用作文件定位器

检查以下值的长度:

  • @UserID是“int”数据类型
  • @UserTypeID为“int”
  • @AccessToken是nVarchar(100)
  • @TokenExpiration是数据时间(2)
  • @RefreshToken是nVarchar(100)

今天,我通过将变量的值限制为列的数据大小,解决了类似的问题

e、 g.如果列大小之一为Varchar(500),且映射值包含500个字符以上。它将在ADODB(VB6.0)中引发此异常


您可以通过增加列数据大小或将值限制为500个字符来解决此问题,在vb6.0中,您可以使用Left([variable_name],500)

您还可以发布存储过程中使用的每个变量中的值,以及发生错误的行号。您好,我在这里发现,调用存储过程后:将记录插入数据库。但在那之后我就犯了错误。数字=3421。我不知道为什么会这样?你能帮我一下吗?请发布存储过程的代码,我们会试试看是否有什么东西会导致这样的错误。你好,Rory,解决了我的问题。这里我发送@TokenExpiration-datetime2是空值。这就是为什么,我犯了那个错误。我现在发送日期()。然后它执行时没有任何错误。感谢您的帮助。供其他人参考:如果您正在使用准备好的语句的参数,您需要在更改
.value
属性之前,将
参数
对象的
.Size
属性重新设置为新数据的适当值,否则,当您尝试使用大于先前值
.Size
的数据设置
.Value
时,将发出此错误。我在这里发现,在调用存储过程后:将记录插入数据库。但在那之后我就犯了错误。数字=3421。我不知道为什么会这样?你能帮帮我吗?可能没什么区别,但你可以试着声明输入的实际长度。您可以尝试[m_objCmd.Parameters.Append m_objCmd.CreateParameter(“@UserTypeID”,3,1,0,UserTypeID)],而不是[m_objCmd.Parameters.Append m_objCmd.CreateParameter(“@UserTypeID”,3,1,Len(UserTypeID)+1,UserTypeID)],我在这里发现,在调用存储过程之后:记录被插入数据库。但在那之后我就犯了错误。数字=3421。我不知道为什么会这样?有人能解释一下吗。