2017-10-06 356 views
1

我一直在研究爲什麼我的下面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',它也不會匹配。 –

回答

1

如果您SQLMigrationFl列可以包含空值,那麼你就需要測試該條件,太。 WHERE SQLMigrationFl <> 'Y'將不會匹配SQLMigrationFl IS NULL,因爲NULL值永遠不會等於(或不等於)到任何其他值。也就是說,

NULL = 'Y'false,但
NULL <> 'Y'false,甚至
NULL = NULLfalse,這就是爲什麼我們需要使用WHERE ... IS NULL來測試NULL值。