如果参数在 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。
如评论中所述,IS
和 IS NOT
不是可以单独使用的术语。它们是更大声明的一部分:IS NULL
或 IS NOT NULL
不能分开。
我正在尝试使用 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。
如评论中所述,IS
和 IS NOT
不是可以单独使用的术语。它们是更大声明的一部分:IS NULL
或 IS NOT NULL
不能分开。