C# postgreSQL und rawdaten(bytea)
-
Hallo, denke ich werd mit dieser frage wenig resonaz bekommen und sie gehört auch evtl, in das datenbank forum. folgendes, ich speichere daten als bytesequenz in eine daetnbankfeld:
byte[][] bindat = new byte[6][]; m_stream.SetLength(0); m_bf.Write((double)a); bindat[0] =m_stream.ToArray(); m_stream.SetLength(0); m_bf.Write((int)b); bindat[1] = m_stream.ToArray(); m_stream.SetLength(0); m_bf.Write((string)c); bindat[2] = m_stream.ToArray(); m_stream.SetLength(0); m_bf.Write((bool)d); bindat[3] = m_stream.ToArray(); m_stream.SetLength(0); m_bf.Write((byte)e); bindat[4] = m_stream.ToArray(); m_stream.SetLength(0); m_bf.Write((float)f); bindat[5] = m_stream.ToArray(); command.CommandText = "UPDATE T_bindatatest2 SET dataval='" + bindat[0] + "' WHERE dataid=1"; command.ExecuteNonQuery(); command.CommandText = "UPDATE T_bindatatest2 SET dataval='" + bindat[1] + "' WHERE dataid=2"; command.ExecuteNonQuery(); command.CommandText = "UPDATE T_bindatatest2 SET dataval='" + bindat[2] + "' WHERE dataid=3"; command.ExecuteNonQuery(); command.CommandText = "UPDATE T_bindatatest2 SET dataval='" + bindat[3] + "' WHERE dataid=4"; command.ExecuteNonQuery(); command.CommandText = "UPDATE T_bindatatest2 SET dataval='" + bindat[4] + "' WHERE dataid=5"; command.ExecuteNonQuery(); command.CommandText = "UPDATE T_bindatatest2 SET dataval='" + bindat[5] + "' WHERE dataid=6"; command.ExecuteNonQuery();
dann will ich diese daten auch wieder lesen:
command.CommandText = "SELECT dataval FROM T_bindatatest2 WHERE dataid < 7 ORDER BY dataid"; OdbcDataReader reader = command.ExecuteReader(); MemoryStream m_stream2 = null; BinaryReader m_br =null; m_br = new BinaryReader(new MemoryStream((byte[])reader.GetValue(0))); double recA = m_br.ReadDouble(); m_br = new BinaryReader(new MemoryStream((byte[])reader.GetValue(0))); int recB = m_br.ReadInt32(); m_br = new BinaryReader(new MemoryStream((byte[])reader.GetValue(0))); string recC = m_br.ReadString(); m_br = new BinaryReader(new MemoryStream((byte[])reader.GetValue(0))); bool recD = m_br.ReadBoolean(); //Etc.
aber die anzahl der bytes die ich in die datenbank schreibe ist später nich mehr identisch mit denen ich lese.. kennst sich jemand aus mit postgre rohdaten?=
-
Hast Du es mal mit DbParameter im DbCommand versucht? Du kannst ein Beispiel unter npgsql (der native Treiber, nicht odbc) sehen:
http://npgsql.projects.postgresql.org/docs/manual/UserManual.html
Dort nach "Working with binary data and bytea datatype" suchen.
-
hey, danke coole seite;)