private static string GetFieldType(Field field)
        {
            var fieldType = string.Empty;

            switch (field.VfpType)
            {
            case VfpType.Logical:
            case VfpType.Integer:
            case VfpType.AutoIncInteger:
            case VfpType.Memo:
            case VfpType.BinaryMemo:
            case VfpType.General:
            case VfpType.DateTime:
            case VfpType.Date:
            case VfpType.Currency:
            case VfpType.Blob:
                fieldType = field.VfpType.ToFieldType();
                break;

            case VfpType.Character:
            case VfpType.BinaryCharacter:
            case VfpType.Varchar:
            case VfpType.BinaryVarchar:
                var vfpType = VfpMapping.GetVfpStringType(field.Width);

                if (vfpType == VfpType.Memo)
                {
                    fieldType = vfpType.ToFieldType();
                }
                else
                {
                    fieldType = string.Format(vfpType.ToFieldType(), field.Width);
                }

                break;

            case VfpType.Double:
                fieldType = string.Format(field.VfpType.ToFieldType(), field.Decimal);
                break;

            case VfpType.Varbinary:
                fieldType = string.Format(field.VfpType.ToFieldType(), field.Width);
                break;

            case VfpType.Numeric:
            case VfpType.Float:
                fieldType = string.Format(field.VfpType.ToFieldType(), field.Width, field.Decimal);
                break;

            default:
                throw new NotSupportedException(field.VfpType.ToString());
            }

            return(fieldType);
        }
Exemple #2
0
        private static VfpType GetStringVfpType(TypeUsage type, int?size)
        {
            Debug.Assert(type.EdmType.BuiltInTypeKind == BuiltInTypeKind.PrimitiveType && PrimitiveTypeKind.String == ((PrimitiveType)type.EdmType).PrimitiveTypeKind, "only valid for string type");

            if (type.EdmType.Name.ToLowerInvariant() == "xml")
            {
                return(VfpType.Memo);
            }

            bool fixedLength;

            if (!type.TryGetIsFixedLength(out fixedLength))
            {
                fixedLength = false;
            }

            return(VfpMapping.GetVfpStringType(size ?? 0, fixedLength));
        }
        private static Field GetField(DataColumn dataColumn)
        {
            var typeCode = Type.GetTypeCode(dataColumn.DataType);
            var field    = new Field {
                Name     = dataColumn.ColumnName,
                Nullable = dataColumn.AllowDBNull
            };

            switch (typeCode)
            {
            case TypeCode.Boolean:
                field.VfpType = VfpType.Logical;
                break;

            case TypeCode.Char:
            case TypeCode.String:
                field.Width   = GetStringLength(dataColumn);
                field.VfpType = VfpMapping.GetVfpStringType(field.Width);
                break;

            case TypeCode.SByte:
            case TypeCode.Byte:
            case TypeCode.Int16:
            case TypeCode.UInt16:
            case TypeCode.Int32:
                field.VfpType = VfpType.Integer;
                break;

            case TypeCode.UInt32:
            case TypeCode.Int64:
            case TypeCode.UInt64:
            case TypeCode.Decimal:
                field.VfpType = VfpType.Numeric;
                field.Width   = VfpMapping.MaximumNumericFieldSize;
                field.Decimal = GetPrecision(dataColumn);
                break;

            case TypeCode.Single:
                field.VfpType = VfpType.Float;
                field.Width   = VfpMapping.MaximumNumericFieldSize;
                field.Decimal = GetPrecision(dataColumn);
                break;

            case TypeCode.Double:
                field.VfpType = VfpType.Double;
                field.Decimal = GetPrecision(dataColumn);
                break;

            case TypeCode.DateTime:
                field.VfpType = VfpType.DateTime;
                break;

            default:
                if (dataColumn.DataType == typeof(byte[]))
                {
                    field.VfpType = VfpType.Blob;
                }
                else if (dataColumn.DataType == typeof(Guid))
                {
                    field.VfpType = VfpType.Character;
                    field.Width   = VfpMapping.GuidStringWidth;
                }
                else
                {
                    throw new NotSupportedException(dataColumn.DataType.ToString());
                }

                break;
            }

            return(field);
        }