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


Anmelden zum Antworten