Asp classic VBScript VarType函数给出了一个奇怪的值

Asp classic VBScript VarType函数给出了一个奇怪的值,asp-classic,vbscript,Asp Classic,Vbscript,我遇到了一个奇怪的问题,从数据库获取数据并使用VBScript for ASP将其转换为正确的类型 我使用以下函数检索了一个记录集: Public Function vfuncGetRS(strQuery) 'Returns a disconnected paging capable recordset 'Note - Non Windows servers don't support disconnected recordsets so you'll always get a

我遇到了一个奇怪的问题,从数据库获取数据并使用VBScript for ASP将其转换为正确的类型

我使用以下函数检索了一个记录集:

Public Function vfuncGetRS(strQuery)
    'Returns a disconnected paging capable recordset
    'Note - Non Windows servers don't support disconnected recordsets so you'll always get a connected recordset on
    '   a non Windows server!

    On Error Resume Next
    Err.Clear

    Dim objData

    Set objData = Server.CreateObject("ADODB.Recordset")
    objData.CursorLocation = adUseClient
    objData.CursorType = adOpenStatic
    objData.LockType = adLockReadOnly
    objData.Open vlogSQLFilter(strQuery), objDB

    If Not blnUNIXMode Then
        Set objData.ActiveConnection = Nothing
    End If

    Set vfuncGetRS = objData
End Function
如果我从记录集中选择一个值并获取其VarType,它将返回值16

Set objRS = vfuncGetRS("SELECT * FROM SOME_TABLE")
Response.Write(VarType(objRS("someColumn")))
这种奇怪分为两部分

  • 这只发生在特定的服务器上,这段代码是CMS的一部分,我在多个站点上部署了CMS,只有在IIS 6.0上运行的实例才会引起问题。这似乎还取决于记录集选项
  • 根据官方MSDN参考,值16不是VarType要返回的有效值
  • 我可以很容易地解决这个问题,方法是向受奇怪值影响的函数添加一个检查,如下所示

    If VarType(strValue) = 16 Then strValue = CInt(strValue)
    
    我必须执行上述操作,因为我需要相关函数正确检测类型是否为数字,如果VarType为16,则IsNumeric()将给出false,即使变量中的值为数字(并且始终为数字)


    所以我的问题是,有人知道为什么会发生这种情况吗?

    根据,16可能代表VT_I1,因此是一个单字节有符号整数。

    正如
    Stijn
    所述,16的值意味着它是一个
    单字节变量,在As
    VT_I1
    中指定

    您之所以得到这个值,是因为MySQL连接驱动程序(正如您所说,遇到这个16值的环境是IIS6和MySQL)


    显然,这是MySQL驱动程序中的一个错误,它没有报告位字段的
    adBoolean
    ,而是报告
    VT_I1

    问题:当您得到vartype16时,下面的列数据类型是什么?你使用什么样的数据库?所有这些都会影响VarType函数的结果。底层列数据类型为BIT,数据库可以是Access、MySql 4x/5x或SQL Server 2000+。正如我所说,该软件安装在不同环境中的多台服务器上。这个特定的环境是使用MySQL 4.1.21的IIS 6.0