Beispiel #1
0
 public virtual void SetFieldType(DBTableField.FieldType fieldType)
 {
     this.fieldType = fieldType;
 }
Beispiel #2
0
        /// <summary>Read a table field</summary>
        /// <exception cref="Com.Khubla.Pdxreader.Api.PDXReaderException"/>
        public virtual void Read(DBTableField pdxTableField, InputStream inputStream)
        {
            try
            {
                /*
                 * get the data
                 */
                byte[] data      = new byte[pdxTableField.GetLength()];
                int    bytesRead = inputStream.Read(data);
                if (bytesRead > 0)
                {
                    /*
                     * convert to type
                     */
                    DBTableField.FieldType fieldType = pdxTableField.GetFieldType();
                    switch (fieldType)
                    {
                    case DBTableField.FieldType.A:
                    {
                        value = StringUtil.ReadString(data);
                        break;
                    }

                    case DBTableField.FieldType.D:
                    {
                        // date
                        long d = ByteBuffer.Wrap(data).Order(ByteOrder.LittleEndian).GetShort();
                        value = System.Convert.ToString(d);
                        break;
                    }

                    case DBTableField.FieldType.S:
                    {
                        long s = ByteBuffer.Wrap(data).Order(ByteOrder.LittleEndian).GetShort();
                        value = System.Convert.ToString(s);
                        break;
                    }

                    case DBTableField.FieldType.I:
                    {
                        data[0] = unchecked ((byte)(data[0] & unchecked ((int)(0x7f))));
                        // handle unsigned integers
                        long i = ByteBuffer.Wrap(data).Order(ByteOrder.BigEndian).GetInt();
                        value = System.Convert.ToString(i);
                        break;
                    }

                    case DBTableField.FieldType.C:
                    {
                        // currency
                        double dollars = ByteBuffer.Wrap(data).Order(ByteOrder.BigEndian).GetDouble();
                        value = double.ToString(dollars);
                        break;
                    }

                    case DBTableField.FieldType.M:
                    {
                        // Memo
                        value = StringUtil.ByteArrayToString(data);
                        break;
                    }

                    case DBTableField.FieldType.N:
                    {
                        long n = ByteBuffer.Wrap(data).Order(ByteOrder.LittleEndian).GetLong();
                        value = double.ToString(n);
                        break;
                    }

                    case DBTableField.FieldType.L:
                    {
                        // Logical
                        value = StringUtil.ByteArrayToString(data);
                        break;
                    }

                    case DBTableField.FieldType.B:
                    {
                        // Binary
                        value = StringUtil.ByteArrayToString(data);
                        break;
                    }

                    case DBTableField.FieldType.O:
                    {
                        // OLE
                        value = StringUtil.ByteArrayToString(data);
                        break;
                    }

                    case DBTableField.FieldType.E:
                    {
                        // formatted memo
                        value = StringUtil.ByteArrayToString(data);
                        break;
                    }

                    case DBTableField.FieldType.G:
                    {
                        // Graphic
                        value = StringUtil.ByteArrayToString(data);
                        break;
                    }

                    case DBTableField.FieldType.Bcd:
                    {
                        // BCD
                        value = StringUtil.ByteArrayToString(data);
                        break;
                    }

                    case DBTableField.FieldType.Bytes:
                    {
                        // Bytes
                        value = StringUtil.ByteArrayToString(data);
                        break;
                    }

                    case DBTableField.FieldType.Ts:
                    {
                        // milliseconds since Jan 1, 1 AD, convert to UTC time
                        data[0] = unchecked ((byte)(data[0] & unchecked ((int)(0x7f))));
                        // handle unsigned number
                        double dt       = ByteBuffer.Wrap(data).Order(ByteOrder.BigEndian).GetDouble();
                        long   dateTime = (long)dt;
                        if (dateTime == 0)
                        {
                            value = null;
                        }
                        else
                        {
                            dateTime -= 86400000;
                            // millis in 1 day
                            dateTime -= 62135607600000l;
                            // millis from 01.01.1970
                            value = System.Convert.ToString(dateTime);
                        }
                        break;
                    }

                    case DBTableField.FieldType.Auto:
                    {
                        short auto = ByteBuffer.Wrap(data).Order(ByteOrder.LittleEndian).GetShort();
                        value = short.ToString(auto);
                        break;
                    }

                    default:
                    {
                        throw new Exception("Unknown field type '" + fieldType.ToString() + "'");
                    }
                    }
                }
            }
            catch (Exception e)
            {
                throw new PDXReaderException("Exception in read", e);
            }
        }
Beispiel #3
0
        /// <summary>types and sizes, 2 bytes per field</summary>
        /// <exception cref="Com.Khubla.Pdxreader.Api.PDXReaderException"/>
        public virtual bool ReadFieldTypeAndSize(LittleEndianDataInputStream littleEndianDataInputStream
                                                 )
        {
            try
            {
                type   = littleEndianDataInputStream.ReadUnsignedByte();
                length = littleEndianDataInputStream.ReadUnsignedByte();
                switch (type)
                {
                case unchecked ((int)(0x00)):
                {
                    return(false);
                }

                case unchecked ((int)(0x01)):
                {
                    fieldType = DBTableField.FieldType.A;
                    break;
                }

                case unchecked ((int)(0x02)):
                {
                    fieldType = DBTableField.FieldType.D;
                    if (length != 4)
                    {
                        throw new Exception("Invalid field length '" + length + "' for type '" + type + "'"
                                            );
                    }
                    break;
                }

                case unchecked ((int)(0x03)):
                {
                    fieldType = DBTableField.FieldType.S;
                    if (length != 2)
                    {
                        throw new Exception("Invalid field length '" + length + "' for type '" + type + "'"
                                            );
                    }
                    break;
                }

                case unchecked ((int)(0x04)):
                {
                    fieldType = DBTableField.FieldType.I;
                    if (length != 4)
                    {
                        throw new Exception("Invalid field length '" + length + "' for type '" + type + "'"
                                            );
                    }
                    break;
                }

                case unchecked ((int)(0x05)):
                {
                    fieldType = DBTableField.FieldType.C;
                    if (length != 8)
                    {
                        throw new Exception("Invalid field length '" + length + "' for type '" + type + "'"
                                            );
                    }
                    break;
                }

                case unchecked ((int)(0x06)):
                {
                    fieldType = DBTableField.FieldType.N;
                    if (length != 8)
                    {
                        throw new Exception("Invalid field length '" + length + "' for type '" + type + "'"
                                            );
                    }
                    break;
                }

                case unchecked ((int)(0x09)):
                {
                    fieldType = DBTableField.FieldType.L;
                    if (length != 1)
                    {
                        throw new Exception("Invalid field length '" + length + "' for type '" + type + "'"
                                            );
                    }
                    break;
                }

                case unchecked ((int)(0xc)):
                {
                    fieldType = DBTableField.FieldType.M;
                    break;
                }

                case unchecked ((int)(0xd)):
                {
                    fieldType = DBTableField.FieldType.B;
                    break;
                }

                case unchecked ((int)(0xe)):
                {
                    fieldType = DBTableField.FieldType.E;
                    break;
                }

                case unchecked ((int)(0xf)):
                {
                    fieldType = DBTableField.FieldType.O;
                    break;
                }

                case unchecked ((int)(0x10)):
                {
                    fieldType = DBTableField.FieldType.G;
                    break;
                }

                case unchecked ((int)(0x14)):
                {
                    fieldType = DBTableField.FieldType.T;
                    if (length != 4)
                    {
                        throw new Exception("Invalid field length '" + length + "' for type '" + type + "'"
                                            );
                    }
                    break;
                }

                case unchecked ((int)(0x15)):
                {
                    fieldType = DBTableField.FieldType.Ts;
                    if (length != 8)
                    {
                        throw new Exception("Invalid field length '" + length + "' for type '" + type + "'"
                                            );
                    }
                    break;
                }

                case unchecked ((int)(0x16)):
                {
                    fieldType = DBTableField.FieldType.Auto;
                    break;
                }

                case unchecked ((int)(0x17)):
                {
                    fieldType = DBTableField.FieldType.Bcd;
                    if (length != 17)
                    {
                        throw new Exception("Invalid field length '" + length + "' for type '" + type + "'"
                                            );
                    }
                    break;
                }

                case unchecked ((int)(0x18)):
                {
                    fieldType = DBTableField.FieldType.Bytes;
                    break;
                }

                default:
                {
                    throw new PDXReaderException("Unknown field type '" + type + "'");
                }
                }
                return(true);
            }
            catch (Exception e)
            {
                throw new PDXReaderException("Exception in read", e);
            }
        }
Beispiel #4
0
 public virtual void SetType(DBTableField.FieldType type)
 {
     this.type = type;
 }