public void Should_get_typed_values() { using (var dbfDataReader = new DbfDataReader(FixturePath)) { var columns = dbfDataReader.GetColumnSchema(); columns.Count.ShouldBe(31); for (var i = 0; i < dbfDataReader.FieldCount; i++) { if (dbfDataReader.IsDBNull(i)) { var value = dbfDataReader.GetValue(i); value.ShouldBeNull(); continue; } var fieldType = dbfDataReader.GetFieldType(i); var typeCode = Type.GetTypeCode(fieldType); switch (typeCode) { case TypeCode.Boolean: dbfDataReader.GetBoolean(i); break; case TypeCode.Int32: dbfDataReader.GetInt32(i); break; case TypeCode.DateTime: dbfDataReader.GetDateTime(i); break; case TypeCode.Single: dbfDataReader.GetFloat(i); break; case TypeCode.Double: dbfDataReader.GetDouble(i); break; case TypeCode.Decimal: dbfDataReader.GetDecimal(i); break; case TypeCode.String: dbfDataReader.GetString(i); break; default: // no cheating throw new NotSupportedException($"Unsupported field type: {fieldType} for column at index: {i}"); } } } }
public static void ReadField(this DbfDataReader dbfDataReader, int ordinal) { var fieldType = dbfDataReader.GetFieldType(ordinal); var typeCode = Type.GetTypeCode(fieldType); switch (typeCode) { case TypeCode.Boolean: dbfDataReader.GetBoolean(ordinal); break; case TypeCode.Int32: dbfDataReader.GetInt32(ordinal); break; case TypeCode.DateTime: dbfDataReader.GetDateTime(ordinal); break; case TypeCode.Single: dbfDataReader.GetFloat(ordinal); break; case TypeCode.Double: dbfDataReader.GetDouble(ordinal); break; case TypeCode.Decimal: dbfDataReader.GetDecimal(ordinal); break; case TypeCode.String: dbfDataReader.GetString(ordinal); break; case TypeCode.Object: dbfDataReader.GetValue(ordinal); break; default: Console.WriteLine($"Unrecognised type: fieldType: {fieldType}, typeCode: {typeCode} "); // no cheating throw new NotSupportedException(); } }