VBScript VarType 函数给出了奇怪的值

Posted

技术标签:

【中文标题】VBScript VarType 函数给出了奇怪的值【英文标题】:VBScript VarType function gives weird value 【发布时间】:2009-05-20 11:55:35 【问题描述】:

我遇到了一个奇怪的问题,即从数据库中获取数据并使用 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 上运行的实例会导致我出现问题。这似乎也取决于记录集选项。 值 16 不是 VarType 根据官方 MSDN 参考返回的有效值

我可以很容易地解决这个问题,方法是向受以下奇怪值影响的函数添加一个检查

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

我必须执行上述操作,因为我需要相关函数来正确检测类型是数字,如果 VarType 为 16,那么即使变量中的值是数字,IsNumeric() 也会给出 false(它总是是数字)

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

【问题讨论】:

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

正如Stijn 所说,16 的值意味着它是一个One Byte Variant,在C++ headers 中指定为VT_I1

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于VBScript VarType 函数给出了奇怪的值的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的合并函数给出奇怪的答案?

返回变量的类型VarType函数

我用winsock2在C++中做了一个简单的套接字,我把recv函数放入一个变量中,它给出了一些奇怪的符号

为啥 printf() 在 python 中给出一个奇怪的输出?

用户定义类型的 VarType

json.load() 函数给出奇怪的 'UnicodeDecodeError: 'ascii' codec can't decode' 错误