CBool​​ 函数在 Access SQL 语句中返回整数

CBool function returning integer in Access SQL statement

我正在使用 C# ExecuteReader 方法从 Access 数据库中读取数据。我在 Access table 中有一个字符串字段,在我的查询中,我使用以下代码将其转换为布尔值:

IIF(IsXYZ = 'True',CBool(1=1),CBool(1=0)) AS IsXYZ

以上声明在数据 reader 中 returning Int16 对我的价值。根据

https://support.office.com/en-us/article/Type-Conversion-Functions-8ebb0e94-2d43-4975-bb13-87ac8d1a2202

它应该 return bool,我在这里错过了什么?

也许试试这个。

CBool(IIf(IsXYZ = 'True',-1,0)) AS IsXYZ

值得一提的是,Access 中的 Yes/No (True/False) 字段在 SQL Server 中被转换为位字段(如果已转换),并将转换为 -1 /0 True/False。顺便说一句,0 总是假的,任何 "non-zero" 数字都被认为是真的,所以 9087 也是真的!

what am I missing here?

我认为你没有遗漏任何东西。我已经使用 System.Data.OleDbSystem.Data.Odbc 和 Access 本身使用 DAO.Recordset 重现了您的问题。似乎 CBool 会在 VBA 语句中 return 一个 Boolean,但它会在 Access SQL 中 return 一个 Integer ] 陈述。 :(