将C#datetime存储到postgresql TimeStamp

Jed*_*usX 6 c# postgresql

我正在开发一个将电子表格中的数据存储到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();
Run Code Online (Sandbox Code Playgroud)

Twe*_*fth 1

您在这里有一些解决方案...我假设组织者表将created_date 和last_update 作为时间戳字段,对吗?最愚蠢的答案是将它们更改为 varchar 字段。呵呵。

2 个更好的答案...我假设这是一个格式错误,其中 DateTime.Now 没有以 pgsql 想要的格式返回:

因为您只是给它当前的时间戳

  • 您可以将表定义为将这些列默认为 now(),然后不将值传递给此列,在插入时,表将仅使用 now() 的默认值填充该列。

  • 无需将变量定义为 DateTime.Now 然后传递该变量,只需发送 postgres now() ,它就会以正确的格式填充它。

第二个潜力是将日期格式化为 PG 期望的插入语句的一部分...我需要知道 DateTime.Now 给出的值以将其格式化为 pg 想要看到的值。这可能是一些字符串操作......