[英]PostgreSQL: operator does not exist: timestamp without time zone == 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.