PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Колоната Postgres bytea връща низ (масив от символи) вместо масив от байтове

В Npgsql има NpgsqlDataReader клас за извличане на вмъкнати редове, напр.:

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

Резултат от C# приложение:

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

Резултат от pgAdmin:

"\000\000\000\000"

РЕДАКТИРАНЕ:

Намерих обяснение защо получавате:

92 48 48 48 48 48 48 48 48

Проверих кода си с предишната версия Npgsql2.0.10-bin-ms.net3.5sp1.zip и получете горния резултат (разбира се, pgAdmin връща \000\000\000\000 ), така че мисля, че най-доброто, което можете да направите, е да използвате друга версия без този бъг.

ОТГОВОР: Потребителска по-висока версия на Npgsql от 2.0.10



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django + Postgres + Големи времеви серии

  2. В Postgres, как да COUNT и WHERE в една и съща заявка, след което да направя математика за резултата?

  3. PostgreSQL как да видите кои заявки са изпълнени

  4. Заявка postgres jsonb по стойност, независимо от ключовете

  5. Грешка при свързване с libpq при използване на C++