美文网首页DBF
C#封装DataTable到DBF

C#封装DataTable到DBF

作者: 新手村的0级玩家 | 来源:发表于2017-08-09 22:43 被阅读0次
    封装的过程

    前言

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

    相关文章

      网友评论

        本文标题:C#封装DataTable到DBF

        本文链接:https://www.haomeiwen.com/subject/hgztnttx.html