如果ASP Classic中不是IsNull

时间:2015-10-21 08:31:36

标签: vbscript asp-classic

我是asp的新手,如果可以的话,我有一个语法错误,我想帮忙。

我有一个ASP页面,显示一个从sql中提取数据的表。大多数数据尚未填充,因此返回NULL。有问题的数据类型是数字。我需要FormatNumber rs当它不为空时,如果不是则填充。

这就是我所拥有的

<%=If Not IsNull(rs("ContractValue")) Then FormatNumber(rs("ContractValue"),0) end if%>

但如上所述,即时出现语法错误。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

我建议不要在此方案中使用IsNull(),而是首先回答有关语法错误的问题。

原因是<%= %>语法是

的简写
<% Response.Write %>
在经典ASP中

所以,如果没有速记方法的话,你实际上在做什么;

<% Response.Write If Not IsNull(rs("ContractValue")) Then FormatNumber(rs("ContractValue"),0) End If %>

语法错误,会触发Syntax Error

要修复代码,请从=代码中移除<% %>,就像这样;

<% If Not IsNull(rs("ContractValue")) Then Response.Write FormatNumber(rs("ContractValue"),0) End If %>

使用IsNull怎么样?

虽然这可以工作,但它通常会产生奇怪的结果,因为DBNull (取决于所使用的数据库)可能不同,并且通常与VBScript vbNull变体不同。

由于这个以及VBScript没有强类型的事实,我发现使用简单的快速强制转换为字符串以避免Null然后检查有效数据是有用的。

示例数字检查

Dim contractValue
contractValue = rs("ContractValue") & ""
If Len(contractValue) > 0 And IsNumeric(contractValue) Then contractValue = Clng(contractValue) Else contractValue = 0

您可以通过编写IIf()功能在本文中解释的可重复使用的代码来进一步理解。

像这样;

Dim contractValue
contractValue = rs("ContractValue") & ""
contractValue = IIf(Len(contractValue) > 0 And IsNumeric(contractValue), contractValue, 0)
  

@Paul made a good point关于参数的评估,在原始代码中可能会破坏

contractValue = IIf(Len(contractValue) > 0 And IsNumeric(contractValue), Clng(contractValue), 0)
     

因为无论结果是Clng(contractValue)还是True,都会评估False。因此,任何格式化都需要在之后进行,或者构建IIf()函数的更复杂版本。

答案 1 :(得分:1)

If Not IsNull(rs("ContractValue")) Then 
    <%=FormatNumber(rs("ContractValue"),0)%>
end if

不要急于使用经典ASP。

我确定您要在某些HTML代码之间插入内容,这些代码会使您收集所有代码。如果是这种情况,我建议您将VBscript代码与HTML分开,例如下面;

<%
Dim valueToOutput

If Not IsNull(rs("ContractValue")) Then 
        valueToOutput=FormatNumber(rs("ContractValue"),0)
    end if
%>

<!-- HTML Code continues below with an inserted VBscript variable -->

There are a total of <%=valueToOutput%> oranges available!