【问题标题】:ASP Classic check for database NULL value in RecordsetASP Classic 检查 Recordset 中的数据库 NULL 值
【发布时间】:2016-12-20 01:02:29
【问题描述】:

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

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

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

【问题讨论】:

  • IsNull() 将不起作用,因为 ADO Null 的处理方式与 VBScript 中的 Null 值不同。只需使用 Len(RS("myCol") & "") > 0 来检查 Null 列。

标签: asp-classic null adodb


【解决方案1】:

试试这个,如果您使用的是 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

【讨论】:

  • 再一次,它不会因为detailed above的原因。
  • 我不知道为什么,但令人惊讶的是它确实对我有用 :)
  • 将取决于所使用的提供程序。
【解决方案2】:

对于nullable bit 类型的数据库列myCol,以下对于包含该列的记录集RS 将成立:

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

另一种解决方案:

  • 如果数据库值为 0 那么Len(RS("myCol")&amp;"") = 5
  • 如果数据库值为 1 那么Len(RS("myCol")&amp;"") = 4
  • 如果数据库值为 Null,则 Len(RS("myCol")&amp;"") = 0

【讨论】:

  • IsNull() 将不起作用,因为 ADO Null 的处理方式与 VBScript 中的 Null 值不同。只需使用 Len(RS("myCol") &amp; "") &gt; 0 检查 Null 列。
  • @Lankymart:您的解决方案不会起作用,因为0Null 都会产生Len = 0。我通过在从真正的 MS SQL 数据库中提取的真正 ASP 经典网站中运行来验证我的答案。所以它适用于我的环境。你是说它不应该工作吗?还是不能保证在这样的环境中工作?
  • 你在干什么?我正在展示如何在不收到错误的情况下检查数据库空值。 Ofc 将是 0,这就是 &gt; 0 检查的重点。
  • @Lankymart:问题是如何检测和区分可空位的三个值。即,当值为 Null 时,避免错误是不够的。我需要能够在 ASP 中区分 Null 值和 0 值。
【解决方案3】:

这对我有用:

Function A9000_Coalesce(SqlValue, ValueIfNull)

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

End Function 

【讨论】:

    【解决方案4】:

    在服务器端 Javascript 你必须测试

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

    而不是

    if (RS("myCol")))
    

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

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

    实际测试值而不是对象。

    【讨论】:

    • 我不了解 JavaScript,但 ADODB.Recordset 对象在 Fields 集合上的默认属性为 Value,因此 RS("myCol") 等同于 RS("myCol").Value
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多