我一直在研究为什么我的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函数没有返回我期望它的想法?
由于
答案 0 :(得分:1)
如果您的SQLMigrationFl
列可以包含NULL值,那么您也需要测试该条件。 WHERE SQLMigrationFl <> 'Y'
与SQLMigrationFl IS NULL
的行不匹配,因为NULL值永远不等于任何其他值(或不等)。也就是说,
NULL = 'Y'
是false
,但是
NULL <> 'Y'
也是false
,甚至是
NULL = NULL
为false
,这就是我们需要使用WHERE ... IS NULL
来测试NULL值的原因。