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