簡體   English   中英

運算符不存在:@timestamp without time zone

[英]operator does not exist: @ timestamp without time zone

在通過 dotConnect 7.7.832 .NET 連接器從 c# 代碼向 PostgreSQL 10.14 發出的參數化查詢中,如果參數為 NULL,我選擇參數值或本地時間戳:

using (var cmd = new PgSqlCommand("select COALESCE(@eventTime, LOCALTIMESTAMP)", connection)

執行時,此語句會在主題中引發錯誤。 如果我注釋掉相應的參數

cmd.Parameters.Add("@eventTime", PgSqlType.TimeStamp).Value = DateTime.Now;

和硬編碼

using (var cmd = new PgSqlCommand("select COALESCE('11/6/2020 2:36:58 PM', LOCALTIMESTAMP)", connection)

或者如果我投了參數

using (var cmd = new PgSqlCommand("select COALESCE(cast(@eventTime as timestamp without time zone), LOCALTIMESTAMP)", connection)

那么它的工作原理。 任何人都可以解釋錯誤中的@運算符所指的內容以及錯誤的原因?

在不起作用的情況下,您的 .Net 連接庫似乎將包含文字@的 SQL 命令傳遞給數據庫,而不是替換它。 數據庫假定您嘗試使用@作為用戶定義的運算符,因為它不知道還有什么可能是。 但是沒有定義這樣的運算符。

為什么要這樣做? 我不知道。 這是關於您的 .Net 連接庫的問題,而不是關於 PostgreSQL 本身的問題,因此您可能需要添加標簽。

您從數據庫獲得的錯誤消息應包括它收到的查詢文本(與您認為已發送的文本相反),並且在這種情況下查看它通常很有用。 如果客戶端的錯誤消息中不存在該文本(某些連接庫不會忠實地傳遞此信息),您應該能夠直接從 PostgreSQL 服務器的日志文件中提取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM