前言
之前讨论过
C#封装DBF文件到DataTable
那么今天反其道而行之,看一下如何将DataTable“封装”到DBF中(即生成一个DBF文件)
1.步骤描述
封装的过程1.1 获取字段的信息
DataTable里面只有字段的名称,没有字段的长度
因此,必须有相应的模板文件来确定字段的长度
根据模板文件,获取每个字段的数据类型
以及字段长度
,进而确定最终DBF文件各字段的详情
1.2遍历每条数进行封装
在确定了DBF字段详情后,只需DataTable中对应字段的数据进行赋值即可
2.代码实现
/// <summary>
/// 创建人:Stone6762
/// 创建时间:2017年3月10日18:12:30
/// 功能描述:将DataTable里的数据封装到DBF中去
/// </summary>
/// <param name="initHeader">DBF模板列</param>
/// <param name="fileName">目标DBF文件路径</param>
/// <param name="dt">要封装的数据</param>
/// 特别注意:因为不能确定同名文件是否满足模板,如果已经存在该文件,会将覆盖,不追加
public static void DataTableToDbf(string initFile, string fileName, DataTable dt)
{
try
{
//获取一个DBF文件对象
DbfFile dbf = new DbfFile(Encoding.Default);
dbf.Open(initFile, FileMode.OpenOrCreate);
DbfHeader initHeader = dbf.Header;
//如果文件存在,那么需要删除文件
if (File.Exists(fileName))
{
File.Delete(fileName);
}
dbf.Open(fileName, FileMode.OpenOrCreate);
//创建DBF文件的结构(列名)
dbf.Header.Unlock();
for (int i = 0; i < initHeader.ColumnCount; i++)
{
DbfColumn initC = initHeader[i];
dbf.Header.AddColumn(initC);
}
//读取DataTable写入到DBF文件里
foreach (DataRow dr in dt.Rows)
{
//将DataRow里的数据封装到DbfRecord里面
DbfRecord record = new DbfRecord(dbf.Header);
foreach (DataColumn dc in dt.Columns)
{
try
{
record[dc.ColumnName] = dr[dc.ColumnName].ToString();
}
catch
{
continue;
}
}
dbf.Write(record, true);
}
//一定要Close才会把数据完全写入到DBF文件中。
dbf.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
网友评论