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
对我的价值。根据
它应该 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.OleDb
、System.Data.Odbc
和 Access 本身使用 DAO.Recordset
重现了您的问题。似乎 CBool
会在 VBA 语句中 return 一个 Boolean
,但它会在 Access SQL 中 return 一个 Integer
] 陈述。 :(
我正在使用 C# ExecuteReader
方法从 Access 数据库中读取数据。我在 Access table 中有一个字符串字段,在我的查询中,我使用以下代码将其转换为布尔值:
IIF(IsXYZ = 'True',CBool(1=1),CBool(1=0)) AS IsXYZ
以上声明在数据 reader 中 returning Int16
对我的价值。根据
它应该 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.OleDb
、System.Data.Odbc
和 Access 本身使用 DAO.Recordset
重现了您的问题。似乎 CBool
会在 VBA 语句中 return 一个 Boolean
,但它会在 Access SQL 中 return 一个 Integer
] 陈述。 :(