带有WHERE子句的ExecuteScalar与所有行

时间:2017-10-06 12:48:42

标签: c# ms-access oledb oledbcommand executescalar

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

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

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

由于

1 个答案:

答案 0 :(得分:1)

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

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