sql >> Base de Datos >  >> RDS >> PostgreSQL

La columna bytea de Postgres está devolviendo una cadena (matriz de caracteres) en lugar de una matriz de bytes

En Npgsql hay NpgsqlDataReader clase para recuperar filas insertadas, por ejemplo:

NpgsqlConnection conn = new NpgsqlConnection(connStr);
conn.Open();

NpgsqlCommand insertCmd =
    new NpgsqlCommand("INSERT INTO binaryData (data) VALUES(:dataParam)", conn);
NpgsqlParameter param = new NpgsqlParameter("dataParam", NpgsqlDbType.Bytea);

byte[] inputBytes = BitConverter.GetBytes((int)0);
Console.Write("Input:");
foreach (byte b in inputBytes)
    Console.Write(" {0}", b);
Console.WriteLine();

param.Value = inputBytes;
insertCmd.Parameters.Add(param);
insertCmd.ExecuteNonQuery();

NpgsqlCommand selectCmd = new NpgsqlCommand("SELECT data FROM binaryData", conn);
NpgsqlDataReader dr = selectCmd.ExecuteReader();
if(dr.Read())
{
    Console.Write("Output:");
    byte[] result = (byte[])dr[0];
    foreach(byte b in result)
        Console.Write(" {0}", b);
    Console.WriteLine();
}

conn.Close();

Resultado de la aplicación C#:

Input: 0 0 0 0
Output: 0 0 0 0

Resultado de pgAdmin:

"\000\000\000\000"

EDITAR:

Encontré una explicación de por qué obtienes:

92 48 48 48 48 48 48 48 48

Revisé mi código con versión anterior Npgsql2.0.10-bin-ms.net3.5sp1.zip y obtenga el resultado anterior (por supuesto, pgAdmin devuelve \000\000\000\000 ), así que creo que lo mejor que puedes hacer es usar otra versión sin este error.

RESPUESTA: Usuario versión superior de Npgsql que 2.0.10