带有 WHERE 子句的 ExecuteScalar 不匹配所有行

ExecuteScalar with WHERE clause not matching all rows

我一直在研究为什么我的下面的 OleDBCommand ExecuteScalar 函数没有正确返回正确的数据。

query = "SELECT Count(*) FROM NoteTable WHERE SQLMigrationFl <> 'Y'";
command = new OldDbCommand(query, connection);
var remainingNotes = (int)command.ExecuteScalar();

我的连接是之前定义的,并被其他查询成功使用。我的 Access 数据库中有 99 条记录;但是,当我 运行 上面的代码时,它只有 returns 10。当我删除 WHERE 语句时,它 returns 全部 99;但是,当 SQLMigrationFl 开始填充 'Y' 时,这将无济于事。关于为什么 ExecuteScalar 函数没有返回我期望的结果有什么想法吗?

谢谢

如果您的 SQLMigrationFl 列可以包含 NULL 值,那么您也需要测试该条件。 WHERE SQLMigrationFl <> 'Y' 不会匹配 SQLMigrationFl IS NULL 的行,因为 NULL 值永远不会等于(或 不等于 )任何其他值。也就是说,

NULL = 'Y'false,但是
NULL <> 'Y' 也是 false,甚至
NULL = NULLfalse,这就是为什么我们需要使用 WHERE ... IS NULL 来测试 NULL 值。