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

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

问题描述:

我一直在研究为什么我的下面OleDBCommand ExecuteScalar函数不正确地返回正确的数据。与WHERE子句不匹配所有行的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

如果你的'SQLMigrationFl'列可以包含NULL值,那么你也需要测试这个条件。 WHERE SQLMigrationFl 'Y''将不匹配'SQLMigrationFl IS NULL'的行。 –

+0

是的,只是改变了我的代码来检查空值。如果你想离开这个答案,我会接受它。 你知道为什么SQLMigrationFl 'Y'没有收到空值吗? –

+0

任何具有'null'值的测试(除了'IS NULL')都会按设计返回'false'。所以即使null不是'Y',它也不会匹配。 –

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

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