Я столкнулся со странной проблемой с получением данных из базы данных и преобразованием их в правильный тип с использованием VBScript для 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, даже если значение в переменной является числовым (и это всегда быть числовым)
Итак, мой вопрос: кто-нибудь знает, почему это происходит?