与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函数没有返回我期望的结果?
感谢
答
如果您SQLMigrationFl
列可以包含空值,那么你就需要测试该条件,太。 WHERE SQLMigrationFl <> 'Y'
将不会匹配SQLMigrationFl IS NULL
,因为NULL值永远不会等于(或不等于)到任何其他值。也就是说,
NULL = 'Y'
是false
,但NULL <> 'Y'
也false
,甚至NULL = NULL
是false
,这就是为什么我们需要使用WHERE ... IS NULL
来测试NULL值。
如果你的'SQLMigrationFl'列可以包含NULL值,那么你也需要测试这个条件。 WHERE SQLMigrationFl 'Y''将不匹配'SQLMigrationFl IS NULL'的行。 –
是的,只是改变了我的代码来检查空值。如果你想离开这个答案,我会接受它。 你知道为什么SQLMigrationFl 'Y'没有收到空值吗? –
任何具有'null'值的测试(除了'IS NULL')都会按设计返回'false'。所以即使null不是'Y',它也不会匹配。 –