Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 运算符不存在:@timestamp不带时区_Postgresql_C# - Fatal编程技术网

Postgresql 运算符不存在:@timestamp不带时区

Postgresql 运算符不存在:@timestamp不带时区,postgresql,c#,Postgresql,C#,在通过dotConnect 7.7.832.NET连接器从c代码向PostgreSQL 10.14发出的参数化查询中,如果参数为NULL,我选择一个参数值或本地时间戳: using (var cmd = new PgSqlCommand("select COALESCE(@eventTime, LOCALTIMESTAMP)", connection) 执行时,此语句在subject中抛出错误。如果我注释掉相应的参数 cmd.Parameters.Add("@ev

在通过dotConnect 7.7.832.NET连接器从c代码向PostgreSQL 10.14发出的参数化查询中,如果参数为NULL,我选择一个参数值或本地时间戳:

using (var cmd = new PgSqlCommand("select COALESCE(@eventTime, LOCALTIMESTAMP)", connection)
执行时,此语句在subject中抛出错误。如果我注释掉相应的参数

cmd.Parameters.Add("@eventTime", PgSqlType.TimeStamp).Value = DateTime.Now;
using (var cmd = new PgSqlCommand("select COALESCE(cast(@eventTime as timestamp without time zone), LOCALTIMESTAMP)", connection)
和硬编码

using (var cmd = new PgSqlCommand("select COALESCE('11/6/2020 2:36:58 PM', LOCALTIMESTAMP)", connection)
或者如果我强制转换参数

cmd.Parameters.Add("@eventTime", PgSqlType.TimeStamp).Value = DateTime.Now;
using (var cmd = new PgSqlCommand("select COALESCE(cast(@eventTime as timestamp without time zone), LOCALTIMESTAMP)", connection)

然后它就起作用了。有人能解释一下错误中的@operator是指什么以及为什么出错吗?

在这种情况下,您的.Net连接库似乎正在向数据库传递一个包含文字@的SQL命令,而不是替换它。数据库假定您正试图使用@作为用户定义的运算符,因为它不知道它可能是什么。但还没有定义这样的运算符

它为什么这样做?我不知道。这是关于.Net连接库的问题,而不是关于PostgreSQL本身的问题,所以您可能需要添加标记


从数据库中得到的错误消息应该包括它接收到的查询文本,而不是您认为它已发送的文本,在这种情况下,看到这一点通常很有用。如果客户端的错误消息中不存在该文本,则某些连接库不会忠实地传递此信息。您应该能够直接从PostgreSQL server的日志文件中提取该信息。

使用当前时间戳进行尝试,ir返回不带时区的时间戳。查看一下在ADO.NET中设置参数值时,如果在ADO.NET上构建dotConnect,则忽略前缀。所以,eventTime,而不是@eventTime。你看过文件了吗?