public XField(BinaryReader br) { //获得DBF字段 dbfField = (DBFField)XTools.FromBytes(br, typeof(DBFField)); //字段名 byte[] bs = new byte[] { dbfField.b1, dbfField.b2, dbfField.b3, dbfField.b4, dbfField.b5, dbfField.b6, dbfField.b7, dbfField.b8, dbfField.b9, dbfField.b10, dbfField.b11 }; name = XTools.BytesToString(bs).Trim(); //字段类型 switch (dbfField.FieldType) { case 'C': //字符型 允许输入各种字符 datatype = Type.GetType("System.String"); break; case 'D': //日期型 用于区分年、月、日的数字和一个字符,按照YYYYMMDD格式。 datatype = Type.GetType("System.String"); break; case 'N': //数值型 if (dbfField.NumberOfDecimalPlaces == 0) { datatype = Type.GetType("System.Int32"); } else { datatype = Type.GetType("System.Double"); } break; case 'F': datatype = Type.GetType("System.Double"); break; case 'B': //二进制 允许输入各种字符 datatype = Type.GetType("System.String"); break; case 'G': //General or OLE datatype = Type.GetType("System.String"); break; case 'L': //逻辑型,表示没有初始化 datatype = Type.GetType("System.String"); break; case 'M': //Memo datatype = Type.GetType("System.String"); break; default: break; } }
internal object DBFValueToObject(BinaryReader br) { byte[] temp = br.ReadBytes(dbfField.LengthOfField); string sv = XTools.BytesToString(temp).Trim(); if (datatype == Type.GetType("System.String")) { return(sv); } else if (datatype == Type.GetType("System.Double")) { return(double.Parse(sv)); } else if (datatype == Type.GetType("System.Int32")) { return(int.Parse(sv)); } return(sv); }