簡體   English   中英

將C#datetime存儲到postgresql TimeStamp

[英]Storing C# datetime to postgresql TimeStamp

我正在開發一個將電子表格中的數據存儲到Postgresql數據庫的應用程序。 我熟悉C#和.Net但對Postgresql不太熟悉。 我將DateTime值存儲到TimeStamp列中時遇到問題。 我一直收到一條錯誤消息:無法將參數值從DateTime轉換為Byte []。 任何意見,將不勝感激。

string query = "INSERT INTO organizer(organizer_name, contact_name, phone, alt_phone, created_date, last_update) " +
                "VALUES('@name', '@contactname', '@phone', '@altphone', '@created', '@updated')";

            OdbcCommand cmd = new OdbcCommand(query, con);
            cmd.Parameters.Add("@name", OdbcType.VarChar);
            cmd.Parameters["@name"].Value = org.Name;

            cmd.Parameters.Add("@contactname", OdbcType.VarChar);
            cmd.Parameters["@contactname"].Value = org.ContactName;

            cmd.Parameters.Add("@phone", OdbcType.VarChar);
            cmd.Parameters["@phone"].Value = org.Phone;

            cmd.Parameters.Add("@altphone", OdbcType.VarChar);
            cmd.Parameters["@altphone"].Value = org.AltPhone;

            cmd.Parameters.Add("@created", OdbcType.Timestamp).Value = DateTime.Now;

            cmd.Parameters.Add("@updated", OdbcType.Timestamp).Value = DateTime.Now;

            con.Open();
            cmd.ExecuteNonQuery();

我沒有PostgreSQL數據庫方便測試,但我相信你看到這個,因為OdbcType.Timestamp實際上是一個字節數組,而不是時間和日期。 來自MSDN

時間戳:二進制數據流(SQL_BINARY)。 這映射到Byte類型的Array。

這可能是因為SQL Server中timestamp數據類型是

一種數據類型,它在數據庫中公開自動生成的唯一二進制數。 timestamp通常用作對表行進行版本標記的機制。

我會嘗試使用OdbcType.DateTime ,它似乎映射到PostgreSQL timestamp背后的概念。

編輯:

是一篇有用的文章,總結了PostgreSQL和.NET之間的映射。

你在這里有一些解決方案......我將假設組織者表有created_date和last_update作為時間戳字段,對嗎? 最愚蠢的答案是將那些更改為varchar字段。 嘿嘿。

2個更好的答案...我假設這是格式錯誤,其中DateTime.Now不以pgsql想要的格式返回:

因為你只是給它當前的時間戳

  • 您可以定義表以將這些列默認為now(),然后不將值傳遞給此列,在插入表上將使用默認的now()填充該表。

  • 而不是將變量定義為DateTime.Now然后傳遞變量,只需發送postgres now(),它將以感覺正確的格式填充它。

第二個可能是將日期格式化為PG期望作為插入語句的一部分...我需要知道DateTime.Now為一個值賦予什么來格式化為pg想要看到的內容。 這可能是一些字符串操作......

暫無
暫無

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

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