public virtual DbTypeInfo GetDbTypeInfo(DataRow columnRow) { var charSize = columnRow.GetAsLong("CHARACTER_MAXIMUM_LENGTH"); var byteSize = columnRow.GetAsLong("CHARACTER_OCTET_LENGTH"); var dataTypeString = columnRow.GetAsString("DATA_TYPE").ToLowerInvariant(); var prec = columnRow.GetAsByte("NUMERIC_PRECISION"); var scale = columnRow.GetAsByte("NUMERIC_SCALE"); var isNullable = (columnRow.GetAsString("IS_NULLABLE") == "YES"); bool isMemo = (charSize < 0 || byteSize < 0); var typeDef = Driver.TypeRegistry.FindVendorDbTypeInfo(dataTypeString); if(typeDef == null) typeDef = Driver.TypeRegistry.Types.FirstOrDefault(td => td.Aliases.Contains(dataTypeString)); if(typeDef == null) return null; var isAutoMemo = Driver.TypeRegistry.AutoMemoTypes.Contains(dataTypeString); var size = isAutoMemo? -1 : (charSize != 0 ? charSize : byteSize); var typeSpec = typeDef.FormatTypeSpec(size, prec, scale, isMemo); var typeInfo = new DbTypeInfo(typeDef, typeSpec, isNullable, size, prec, scale, typeDef.DefaultColumnInit); // AssignValueConverters(typeInfo); - no need for value converters return typeInfo; }