我是asp的新手,如果可以的话,我有一个语法错误,我想帮忙。
我有一个ASP页面,显示一个从sql中提取数据的表。大多数数据尚未填充,因此返回NULL。有问题的数据类型是数字。我需要FormatNumber
rs
当它不为空时,如果不是则填充。
这就是我所拥有的
<%=If Not IsNull(rs("ContractValue")) Then FormatNumber(rs("ContractValue"),0) end if%>
但如上所述,即时出现语法错误。
我做错了什么?
答案 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!