我建议不要使用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 不是强类型的事实,我发现使用简单的快速转换为字符串以避免空值然后检查有效数据很有用。
数字检查示例
Dim contractValue
contractValue = rs("ContractValue") & ""
If Len(contractValue) > 0 And IsNumeric(contractValue) Then contractValue = Clng(contractValue) Else contractValue = 0
您可以通过编写一段可重用的代码来进一步实现这一点IIf()
这篇文章中解释了函数。
-
如何在 Classic-ASP 的 VBScript 中执行单行 If 语句? (提及 by @TasosK在评论中)
像这样的东西;
Dim contractValue
contractValue = rs("ContractValue") & ""
contractValue = IIf(Len(contractValue) > 0 And IsNumeric(contractValue), contractValue, 0)
@Paul 提出了一个很好的观点关于参数的评估,在原始代码中可能会破坏
contractValue = IIf(Len(contractValue) > 0 And IsNumeric(contractValue), Clng(contractValue), 0)
because Clng(contractValue)
无论结果是否正确都会被评估True
or False
。因此,任何格式都需要在之后进行,或者是更复杂的版本IIf()
功能被构建。