我使用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的一部分,我将其部署在多个站点上,并且只有在IIS 6.0上运行的实例才引起问题。同样,这似乎取决于记录集选项。
根据官方MSDN参考,值16不是VarType返回的有效值


我可以通过在受奇怪值影响的函数中添加检查来轻松解决这个问题,如下所示

If VarType(strValue) = 16 Then strValue = CInt(strValue)


我必须执行上述操作,因为我需要有问题的函数来正确检测类型为数字,并且如果VarType为16,则即使变量中的值为数字(并且它将始终为数字),IsNumeric()也会返回false。

所以我的问题是,有人知道为什么会这样吗?

最佳答案

Stijn所述,值16表示它是一个One Byte Variant,在C++ headers中指定为VT_I1

而且,由于MySQL连接驱动程序,您只能获得此值(正如您所指出的,遇到此16值的环境是MySQL的IIS6)。

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

关于asp-classic - VBScript VarType函数给出了奇怪的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/887495/

10-09 00:26