C#封装DataTable到DBF

来源:互联网 发布:krpano100源码 授权码 编辑:程序博客网 时间:2024/05/29 10:08

封装的过程

前言

之前讨论过
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);            }        }