从SQL表记录创建.DBF文件

Chi*_*rag 7 .net c# dbf

我想.DBF从SQL表记录创建一个文件.

例如,如果有一个CountryMaster在SQL 中命名的表,它有5列:

  1. ID int identity(1,1)
  2. 名称varchar(100)
  3. 详细信息varchar(200)
  4. 状态位
  5. CreatedDate datetime

它有100行.

如何使用.DBFC#中的文件头导出这些记录?

注意:创建的.DBF文件大小必须非常紧凑.

Hos*_*Rad 11

您可以看到Xbase数据文件(*.dbf)结构并编写自己的代码,但我已经完成了实现,并且已经使用了多年.在这里你可以在GitHub上找到它


如何使用该库

在名为DbfFile.cs的文件中有一些写入方法.你可以使用它们中的任何一个.我将解释其中一些:

第一种写法

保存DataTabledbf文件:

static void Write(string fileName, System.Data.DataTable table, Encoding encoding)
Run Code Online (Sandbox Code Playgroud)
  • fileName:是您希望.dbf保存输出文件的位置.
  • table:是您从SQL Server或任何其他来源读取的数据.
  • encoding:保存字符串数据时使用的编码

第二种写法

保存List<T>到dbf文件中.

static void Write<T>(string fileName,
                                    List<T> values,
                                    List<Func<T, object>> mapping,
                                    List<DbfFieldDescriptor> columns,
                                    Encoding encoding)
Run Code Online (Sandbox Code Playgroud)

读取数据库并将结果保存到某个类类型,然后使用此方法将类值保存到dbf文件.这是对它的参数的描述:

  • fileName:要保存的dbf文件名
  • values:您的数据作为T要保存到dbf文件中的类型对象的列表
  • mapping:一个函数列表,告诉此方法如何从类类型中检索数据.
  • columns:dbf列信息
  • encoding:dbf文件的编码.

第二种写入方法的示例

由于第一种方法是直接的,我提供了第二种写方法的示例.考虑您要将List<MyClass>数据保存到dbf文件中.这是代码

class MyClass
{
    public int Id {get;set;}
    public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

现在您可以将a保存List<MyClass>到dbf文件中,如下所示:

var idColumn = DbfFieldDescriptors.GetIntegerField("Id");
var nameColumn = DbfFieldDescriptors.GetStringField("Name");
var columns = new List<DbfFieldDescriptor>() { idColumn, nameColumn };

Func<MyClass, object> mapId = myClass => myClass.Id;
Func<MyClass, object> mapName = myClass => myClass.Name;
var mapping = new List<Func<MyClass, object>>() { mapId, mapName };

List<MyClass> values = new List<MyClass>();
values.Add(new MyClass() { Id = 1, Name = "name1" });

DbfFileFormat.Write(@"C:\yourFile.dbf", values, mapping, columns, Encoding.ASCII);
Run Code Online (Sandbox Code Playgroud)

同样使用此库,您可以读取dbf文件,并且您的代码不依赖于Microsoft.Jet.OLEDB任何其他内容.

好好享受.

  • 我不会downvote,但是当它有这样的错误时,我肯定会犹豫是否使用未知程序员的随机GitHub库. (2认同)
  • 无论如何,如果您正在寻找可以减少dbf文件大小的答案(但从技术上讲,它对于给定的数据集没有意义),请考虑编辑您的问题并在您的问题中提及该点.无论如何,我建议你寻找其他格式,忘记.dbf格式. (2认同)