Хранение метки времени c# datetime в 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();

2 ответов


У вас есть несколько решений...Я собираюсь предположить, что таблица organizer имеет created_date и last_update как поля метки времени, правильно? Самый глупый ответ-изменить их на поля varchar. хех.

2 лучшие ответы...Я предполагаю, что это ошибка форматирования, где DateTime.Теперь не возвращается в формате pgsql хочет:

Так как вы просто даете ему текущую метку времени

  • вы можете определить свою таблицу по умолчанию столбцы to now (), а затем не передавать значения в этот столбец, при вставке таблица просто заполнит это значение по умолчанию now ().

  • вместо определения переменной в DateTime.Время от времени передавая переменную, просто отправьте postgres now (), и она заполнит ее в формате, который кажется правильным.

и второй потенциал-отформатировать дату в то, что PG ожидает как часть инструкции insert...Мне нужно знать, какое время.Теперь давать значение формата это к тому, что ПГ хочет видеть. Это может быть немного работы со строками...


у меня нет PostgreSQL db для тестирования, но я считаю, что вы видите это, потому что OdbcType.Timestamp на самом деле является массивом байтов, а не временем и датой. От MSDN:

отметка времени: поток двоичных данных (SQL_BINARY). Это сопоставляется массиву типа Byte.

это, вероятно, потому, что timestamp тип данных, в SQL Server, is

тип данных, который автоматически выставляет сформированные уникальные двоичные числа в базе данных. метка времени обычно используется в качестве механизма для штамповки строк таблицы версий.

Я бы попробовал использовать OdbcType.DateTime, который, кажется, сопоставляется с концепциейв PostgreSQL!--6--> timestamp.

EDIT:

здесь - полезный пост, который суммирует сопоставления между PostgreSQL и .Сеть.