ASP 记录集中数据库 NULL 值的经典检查

ASP Classic check for database NULL value in Recordset

我正在获取一个 ADODB 记录集,我需要检查 ASP Classic 中可为空列的值。我怎么知道它是否为空? ASP Classic 中不存在 AFAIK IsDBNull,所有 Null 测试人员都询问对象是否为 null,而不是它的值。

例如,我有包含列 RS("myCol") 的记录集 RS。在数据库中,myCol 是可空位,因此值可以是 {0, 1, NULL}.

如何测试 RS("myCol") = NULL?看来,如果我从字面上 运行 进行比较,它只会告诉我对象 RS("myCol") 是否为 Null,而不会告诉我请求的字段的值是否为 "database" null。

对于 nullable bit 类型的数据库列 myCol,包含该列的 Recordset RS 如下:

  • 如果数据库值为0,则RS("myCol") = Empty = False = 0
  • 如果数据库值为1,则RS("myCol") = True = 1
  • 如果数据库值为Null,则IsNull(RS("myCol")) = True = 1

另一个解决方案:

  • 如果数据库值为 0 则 Len(RS("myCol")&"") = 5
  • 如果数据库值为 1 则 Len(RS("myCol")&"") = 4
  • 如果数据库值为空则Len(RS("myCol")&"") = 0

试试这个,如果你使用的是 MS,它应该可以工作 SQL

IF IsNull(RS("myCol")) = False THEN
  IF RS("myCol") THEN
    Response.Write "myCol is TRUE"
  ELSE
    Response.Write "myCol is False"
  END IF
ELSE
  Response.Write "myCol is NULL"
END IF

或尝试使用

IF RS("myCol")<>"" THEN
  IF RS("myCol") THEN
    Response.Write "myCol is TRUE"
  ELSE
    Response.Write "myCol is False"
  END IF
ELSE
  Response.Write "myCol is NULL"
END IF

在服务器端Javascript你必须测试

if (RS("myCol").Value))

而不是

if (RS("myCol")))

所以您可能需要在 VBScript 中使用

IF IsNull(RS("myCol").Value) THEN

实际测试值而不是对象。

这对我有用:

Function A9000_Coalesce(SqlValue, ValueIfNull)

    If VarType(SqlValue) = vbNull Then 
        A9000_Coalesce = ValueIfNull
    Else
        A9000_Coalesce = SqlValue
    End If

End Function