DBAClientX.Dbf
1.0.15
dotnet add package DBAClientX.Dbf --version 1.0.15
NuGet\Install-Package DBAClientX.Dbf -Version 1.0.15
<PackageReference Include="DBAClientX.Dbf" Version="1.0.15" />
<PackageVersion Include="DBAClientX.Dbf" Version="1.0.15" />
<PackageReference Include="DBAClientX.Dbf" />
paket add DBAClientX.Dbf --version 1.0.15
#r "nuget: DBAClientX.Dbf, 1.0.15"
#:package DBAClientX.Dbf@1.0.15
#addin nuget:?package=DBAClientX.Dbf&version=1.0.15
#tool nuget:?package=DBAClientX.Dbf&version=1.0.15
DBAClientX.Dbf
Read DBF/xBase tables with a forward-only DbDataReader. This package owns DBF decoding and DBT/FPT memo access without an ODBC driver, database server, or SQL-provider dependency.
using DBAClientX.Dbf;
using var reader = DbfDataReader.Open("customers.dbf");
while (reader.Read()) {
Console.WriteLine(reader["NAME"]);
}
Schema exposes column names, native types, lengths, decimal counts, nullability, language driver, and dialect before reading rows. Standard consumers can use GetSchemaTable(), DataTable.Load(reader), and IDataReader exports. Typed getters return the declared CLR type; they do not round or implicitly convert numeric values.
using var reader = await DbfDataReader.OpenAsync("customers.dbf",
new DbfReadOptions { MaxRecords = 100_000 }, cancellationToken);
while (await reader.ReadAsync(cancellationToken)) {
// ReadAsync performs asynchronous table I/O. Memo getters use bounded synchronous I/O.
Console.WriteLine(reader.GetString(0));
}
Supported profiles
| Table profile | Version bytes | Fields |
|---|---|---|
| dBASE III compatible | 03, 83 |
Character C, decimal N, floating F, date D, logical L; 83 supports text M through DBT |
| FoxPro 2 with memos | F5 |
C, N, F, D, L, FPT memo M, opaque general/picture G/P |
| Visual FoxPro | 30, 31, 32 |
Above types plus integer I, double B, currency Y, datetime T, binary C/M, and nullable fields through _NullFlags |
Version recognition does not imply support for every field in that generation. Varchar, varbinary, blob, unsupported system fields, dBASE IV/7 memo layouts, encrypted files, and incomplete transactions fail explicitly. Autoincrement field values are read as integers; this reader does not implement generation or editing. Text numeric fields are limited to 20 bytes and decoded as decimal; binary currency retains its four decimal places. Dates and datetimes use DateTimeKind.Unspecified.
Deleted records are skipped by default. Set IncludeDeletedRecords to include them and inspect IsDeleted. SourceRecordNumber gives the one-based physical record number, including skipped records. Blank numeric, date, and unknown logical fields return DBNull.Value. Empty character and unreferenced memo fields return empty strings or byte arrays; native nullable fields return DBNull.Value according to the null bitmap.
Indexes and database backlinks are reported as metadata and never followed. General, picture, and binary memo payloads remain inert bytes. This package does not interpret embedded objects, query indexes, execute code, or write DBF files.
Streams, encodings, and limits
Path opens own their table and same-stem .dbt/.DBT or .fpt/.FPT files. Stream opens begin at each stream's current position. Table streams may be nonseekable; memo streams must be readable and seekable. LeaveOpen defaults to true for both caller streams. The reader copies options at open time and is not thread-safe.
using var reader = DbfDataReader.Open(tableStream,
new DbfReadOptions { MaxInputBytes = 16 * 1024 * 1024, LeaveOpen = true },
memoStream, cancellationToken);
A missing sidecar permits schema and ordinary-column reads. Accessing a nonempty memo reference without its sidecar throws InvalidDataException. Both table and memo storage are bounded, as are physical record count, field count, individual memo payload, and aggregate materialized memo bytes. Repeated getters for one field use the current row's cache. Repeated references in different rows count again toward the aggregate memo budget.
The header's supported language-driver mapping selects a strict decoder. Driver zero uses ASCII; unknown drivers require an explicit Encoding override. Invalid byte sequences fail. The package never registers a global encoding provider or guesses a locale. After a partial storage read or malformed value, the reader is faulted and cannot resume. A cancelled async call that has not begun I/O leaves the current row accessible.
Evidence
The focused tests use fictional fixtures produced with dbf 0.99.11 and independently decoded with dbfread 2.0.7. Their generator, inputs, expected records, and SHA-256 manifest live in the fixture directory. The producer supplies native null and binary field evidence; dbfread does not interpret those flags completely. Additional tests cover standard DataTable consumption, sync/async traversal, current-position streams, ownership, cancellation, strict encoding, truncation, and resource limits.
This evidence covers the named fixtures and contracts. It does not establish acceptance by original dBASE/FoxPro applications or NativeAOT qualification.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 is compatible. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.7.2
- System.Text.Encoding.CodePages (>= 10.0.10)
-
.NETStandard 2.0
- System.Text.Encoding.CodePages (>= 10.0.10)
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on DBAClientX.Dbf:
| Package | Downloads |
|---|---|
|
OfficeIMO.Reader.Dbf
DBF/xBase table ingestion backed by the canonical DbaClientX codec. |
GitHub repositories
This package is not used by any popular GitHub repositories.