C# 如果参数位于IS之后,Npgsql将抛出错误
我试图使用Npgsql来查询具有空值的行,并且使用一个简单的查询它可以工作,但是如果我使用一个准备好的语句,它会出错 例如,此查询可以工作:C# 如果参数位于IS之后,Npgsql将抛出错误,c#,postgresql,npgsql,C#,Postgresql,Npgsql,我试图使用Npgsql来查询具有空值的行,并且使用一个简单的查询它可以工作,但是如果我使用一个准备好的语句,它会出错 例如,此查询可以工作: 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; 此查询将返回一个空结
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;
此查询将返回一个空结果集,但不会返回预期的错误:
// @null is a parameter with a null value (DBNull.Value)
SELECT * FROM table WHERE column = @null LIMIT 10;
我还尝试对布尔值使用IS,它的行为与预期的一样,使用=,但在IS上抛出了一个错误。我是做错了什么还是这是一个bug
堆栈跟踪/错误信息:
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
不是可以单独使用的术语。它们是更大声明的一部分:是空的
或不是空的
,不能分开。正如注释中提到的是
和不是
不是可以单独使用的术语。它们是更大语句的一部分:为空
或不为空
,不能分开。单独存在没有意义吗?=单独存在也没有意义\@param不是。IS\@param也不是。我是说。IS NULL是一个完整的语句,表示为FALSE或TRUE。你不能拆开,只使用IS部分并粘贴一个参数来完成语句。哦,我明白了。那么本质上为空的参数值是没有价值的?我想除了插入和函数参数@SteveNULL参数值绝对不是一文不值的-例如,在插入值(有时为null,有时不为null)时可以使用它们。但是,如上所述,IS NULL是一个不能分解的表达式-参数不是文本搜索和替换。IS独自一人没有意义吗?=独自一人也没有意义\@param不是。IS\@param也不是。我是说。IS NULL是一个完整的语句,表示为FALSE或TRUE。你不能拆开,只使用IS部分并粘贴一个参数来完成语句。哦,我明白了。那么本质上为空的参数值是没有价值的?我想除了插入和函数参数@SteveNULL参数值绝对不是一文不值的-例如,在插入值(有时为null,有时不为null)时可以使用它们。然而,如上所述,IS NULL是一个不能分解的表达式-参数不是文本搜索和替换。