如果参数在 IS 之后,Npgsql 会抛出错误

Npgsql Throws an Error if Parameter Comes after IS

我正在尝试使用 Npgsql 查询具有 NULL 值的行,并且使用一个简单的查询它可以工作,但是如果我使用准备好的语句它会出错。

例如,此查询有效:

SELECT * FROM table WHERE column IS NULL LIMIT 10;

但是这个不会:

// @null is a parameter with a null value (DBNull.Value)
SELECT * FROM table WHERE column IS @null LIMIT 10;

此查询将 return 一个空结果集,但没有预期的错误:

// @null is a parameter with a null value (DBNull.Value)
SELECT * FROM table WHERE column = @null LIMIT 10;

我还尝试使用 IS 作为布尔值,使用 = 时它的行为再次符合预期,但在 IS 上引发了错误。我做错了什么还是这是一个错误?

堆栈trace/error信息:

Npgsql.PostgresException -- External component has thrown an exception.
at Npgsql.NpgsqlConnector.DoReadSingleMessage(DataRowLoadingMode dataRowLoadingMode, Boolean returnNullForAsyncMessage, Boolean isPrependedMessage)
at Npgsql.NpgsqlConnector.ReadSingleMessage(DataRowLoadingMode dataRowLoadingMode, Boolean returnNullForAsyncMessage)
at Npgsql.NpgsqlCommand.Prepare()

所有测试 运行 使用最初版本 3.0.4 和 3.1.9。

如评论中所述,ISIS NOT 不是可以单独使用的术语。它们是更大声明的一部分:IS NULLIS NOT NULL 不能分开。