sql >> Database >  >> RDS >> PostgreSQL

Postgres bytea-kolom retourneert string (char-array) in plaats van byte-array

In Npgsql is er NpgsqlDataReader class om ingevoegde rijen op te halen, bijvoorbeeld:

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

Resultaat van de C#-app:

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

Resultaat van pgAdmin:

"\000\000\000\000"

BEWERKEN:

Ik heb een verklaring gevonden waarom je het volgende krijgt:

92 48 48 48 48 48 48 48 48

Ik heb mijn code gecontroleerd met vorige versie Npgsql2.0.10-bin-ms.net3.5sp1.zip en krijg bovenstaand resultaat (natuurlijk retourneert pgAdmin \000\000\000\000 ), dus ik denk dat je het beste een andere versie kunt gebruiken zonder deze bug.

ANTWOORD: Gebruiker hogere versie van Npgsql dan 2.0.10



  1. PostgreSQL Query om gegevens van vorige week te selecteren?

  2. Sluit bepaalde waarden uit bij het splitsen van een vaste waarde naar landen op basis van een dagelijks inkomstenaandeel

  3. Hoe HTML-selecteerwaarde in te voegen als tekst in MySQL via PHP

  4. Zelf lid worden van SQL