W Npgsql jest NpgsqlDataReader
klasa do pobierania wstawionych wierszy, np.:
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();
Wynik z aplikacji C#:
Input: 0 0 0 0
Output: 0 0 0 0
Wynik z pgAdmin:
"\000\000\000\000"
EDYTUJ:
Znalazłem wyjaśnienie, dlaczego otrzymujesz:
92 48 48 48 48 48 48 48 48
Sprawdziłem kod w poprzedniej wersji Npgsql2.0.10-bin-ms.net3.5sp1.zip
i uzyskaj powyższy wynik (oczywiście pgAdmin zwraca \000\000\000\000
), więc myślę, że najlepszym rozwiązaniem, które możesz zrobić, jest użycie innej wersji bez tego błędu.
ODPOWIEDŹ: Użytkownik wyższej wersji Npgsql niż 2.0.10