[英]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.