2011-12-29 62 views
5

Estoy trabajando en una aplicación que almacena datos en una hoja de cálculo en una base de datos Postgresql. Estoy familiarizado con C# y .Net pero no tan bien con Postgresql. Tengo problemas para almacenar un valor de DateTime en una columna TimeStamp; Sigo recibiendo un mensaje de error: Error al convertir el valor del parámetro de DateTime a Byte []. Cualquier consejo sería apreciado.Almacenamiento de C# datetime a postgresql TimeStamp

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(); 

Respuesta

1

Aquí tienes algunas soluciones ... Supongo que la tabla del organizador tiene los campos created_date y last_update as timestamp, ¿correcto? La respuesta más tonta es cambiarlos a campos varchar. heh.

2 respuestas mejores ... Estoy asumiendo que esto es un error de formato, donde DateTime.Now no regresa en el formato pgsql quiere:

Desde que se acaba dándole la fecha y hora actual

  • puede definir su tabla para predeterminar estas columnas a now() y luego no pasar valores a esta columna, en una inserción la tabla simplemente llenaría eso con el valor predeterminado de now().

  • en lugar de definir la variable a DateTime.Now y luego pasar la variable, simplemente envíe postgres now() y lo rellenará en el formato que le parezca correcto.

Y segundo potencial es para dar formato a la fecha en lo que PG espera que como parte de la instrucción de inserción ... que había necesidad de saber qué DateTime.Now da un valor para dar formato a lo que quiere pg ver. Esto podría ser un poco de manipulación de cadenas ...

2

que no tienen una PostgreSQL db útil para probar con, pero creo que usted está viendo esto porque el OdbcType.Timestamp es en realidad un conjunto de bytes, no una hora y la fecha. De MSDN:

Timestamp: A stream of binary data (SQL_BINARY). This maps to an Array of type Byte.

Esto es probablemente debido a que el tipo de datos timestamp, en SQL Server, es

a data type that exposes automatically generated, unique binary numbers within a database. timestamp is generally used as a mechanism for version-stamping table rows.

me gustaría probar usando OdbcType.DateTime, que parece correlacionarse con el concepto detrás PostgreSQL'stimestamp.

EDIT:

Here es un útil post que resume las asignaciones entre PostgreSQL y .NET.

+0

Eso resuelve ese error, pero produce otro error - ERROR: sintaxis de entrada no válida para tipo timestamp: "@created"; Error al ejecutar la consulta. – JediusX

Cuestiones relacionadas