【问题标题】:Issue with if statement which should be true comes up as false应该为真的 if 语句的问题出现为假
【发布时间】:2021-01-25 17:07:51
【问题描述】:

我们最近将一个非常旧的网站迁移到了新服务器,但遇到了一个奇怪的问题。有一个简单的 if 语句应该和在旧服务器上读取为 true,但它不是也不知道为什么。声明如下。当我写出 invflag 时,它等于 1,这是我所期望的。

'does not trigger as true so iChk remains = ""
iChk = ""
if invflag = True then
    iChk = "checked"
end if

'Works as expected
iChk = ""
if invflag = "1" then
    iChk = "checked"
end if

'works as expected
iChk = ""
if invflag = 1 then
    iChk = "checked"
end if

我知道我们可以简单地解决这个问题,如您所见,但我们在整个代码中散布着这些类型的语句,如果服务器或数据库有什么东西,我们可以设置这是理想的,我想我会检查一下。

p>

【问题讨论】:

  • 在深入研究之后,看起来在旧系统上该值将作为布尔值返回。现在它以字符串的形式返回。我们从 MSSQL 转换为 MySQL,所以问题是 MySQL 将其作为字符串返回,即使数据类型是 Int。
  • 这正是我的下一个问题:invflag 的来源是什么?

标签: asp-classic


【解决方案1】:

只需转换为 CBool 即可解决所有情况:

If CBool(invflag) = True Then
    iChk = "checked"
End If

或更好

If CBool(invflag) Then
    iChk = "checked"
End If

【讨论】:

  • 这确实有效,但我已经知道如何解决它,但看看为什么会发生这种情况,所以我们不必花费大量时间编辑代码,因为它在我们的其他服务器上按计划工作相同的代码。
【解决方案2】:

事实证明,在从 MSSQL 迁移到 Mysql 的过程中,它会将 Bit 字段转换为 TinyInt。一旦我们将字段改回 Bit,if 语句就可以像以前一样工作。

【讨论】:

    猜你喜欢
    • 2013-09-05
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2017-12-19
    • 1970-01-01
    • 2010-10-02
    • 2018-07-31
    相关资源
    最近更新 更多