Хранение метки времени 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 и .Сеть.