sql >> Databáze >  >> RDS >> PostgreSQL

Sloupec bajtů Postgres vrací řetězec (pole znaků) namísto bajtového pole

V Npgsql je NpgsqlDataReader třídy pro načtení vložených řádků, např.:

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

Výsledek z aplikace C#:

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

Výsledek z pgAdmin:

"\000\000\000\000"

UPRAVIT:

Našel jsem vysvětlení, proč dostáváte:

92 48 48 48 48 48 48 48 48

Zkontroloval jsem svůj kód s předchozí verzí Npgsql2.0.10-bin-ms.net3.5sp1.zip a získejte výše uvedený výsledek (samozřejmě pgAdmin vrátí \000\000\000\000 ), takže si myslím, že nejlepší, co můžete udělat, je použít jinou verzi bez této chyby.

ODPOVĚĎ: Uživatel vyšší verze Npgsql než 2.0.10



  1. Použití LIKE v bindParam pro dotaz MySQL PDO

  2. ORA-06531 po upgradu Oracle

  3. Order By on HasMany vztah Laravel 5

  4. Jak mohu uložit výstup dotazu do dočasné tabulky a použít tabulku v novém dotazu?