2009-05-20 61 views
3

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

我使用下面的函数检索的记录:

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"))) 

的古怪分为两个部分

  1. 这只是发生在一个特定的服务器上,此代码是一个CMS,我在多个网站上部署的一部分,它只是在IIS 6.0上运行的实例导致我一个问题。此外,这似乎取决于记录集选项。
  2. 值16不是VarType函数返回一个有效的值,根据官方的MSDN参考

我可以通过增加检查到受着怪异值的函数避开这个问题很容易哪些是如下

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

我必须做上述,因为我需要有问题的功能,以正确地检测该类型是数字,并且如果VarType函数是16然后则IsNumeric()给出了假即使在该变量中的值是数字(并且将始终为数字)

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

+0

问题:当你得到VarType 16什么是底柱数据类型? 你使用什么样的数据库? 所有这些都会影响VarType函数的结果。 – 2009-05-20 12:08:30

回答

3

Stijn已经指出,16的值表示,它是一个One Byte Variant,在C++ headers作为VT_I1指定。

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

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

0

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