CSV 文件分析与导入数据库

22 篇文章 0 订阅
rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"> rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_editdata.mso"> rel="themeData" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"> rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml">

CSV 文件分析与导入数据库

 

 

1       简介

CSV全称 Comma Separated values,是一种用来存储数据的纯文本文件格式,通常用于电子表格或数据库软件。

1.1       规则

l  开头是不留空,以行为单位。

l  可含或不含列名,含列名则居文件第一行。

l  一行数据不垮行,无空行。

l  以半角符号[,]作分隔符,列为空也要表达其存在。

l  列内容如存在[,],则用双引号[””]将该字段内容包含起来。

l  列内容如存在[”],双引号[””]将该字段内容包含起来,并且在内容中用两个双引号表示一双引号[””]

l  文件读写时引号,逗号操作规则互逆。

l  内码格式不限,可为ASCIIUnicode或者其他。

1.2       扩展

现在根据业务需求,将CSV文件数据导入数据库。

业务规则对CSV文件扩展如下。

l  文件开头可以使用符号 # 做为行注释。

l  文件必须包含列名定义,并且下一行为列的类型定义。

l  列内容如存在[换行],则用双引号[””]将该字段内容包含起来,换行符保留,使本记录跨行。

l  允许空行,程序或略。

 

2       程序设计

主要目标:读取CSV文件,导入数据库中指定的表。

该组件主要由3个类组成:

类图

 

2.1       CSV文件读取流程

CSV 读取流程

 

2.2       导入数据库流程

CSV导入数据库流程

2.3       CsvRow

类图如下:

CsvRow Class

该类是分析CSV文件的核心类,负责分析文件结构与提取每一行数据,转换为指定的类型。

在构造函数中,要求传入一个等待读取数据的文本流和头结构定义。通过ReadRow()函数,提取每一行数据。

 


 

2.4       CsvDataReader

类图如下:

CsvDataReader Class

该类实现了IDataReader接口,提供一个向前只读的流访问CSV文件数据。

根据微软建议:用户并不直接创建 DataReader 类的实例,而是通过使用Command对象的 ExecuteReader 方法获取 DataReader 实例。因此,将 DataReader 构造函数标记为内部构造函数。这里,我们通过CsvDataReader. ExecuteReader ()方法,创建该对象实例。

ExecuteReader ()方法接受文件路径或文本流参数,并在构造期间,分析CSV文件头,存入属性Head中。通过IDataReader接口的Read(),GetValue(),Close()等方法进行数据访问。

 

2.5       Importer

类图如下:

ImporterClass

 

该类负责将CSV数据导入数据。

根据用户提供的导入模式UseTableStruct,将CSV文件与数据库表进行不同规则的比较,并且使用SqlBulkCopy做为大容量数据导入工具。同时也限制了只能导入SQL数据库。

用户可以将设置UseStruct属性设置为UseTableStruct. RebuildStruct,实现直接由CSV创建表,也可以更新原有表结构(删除重建)。


 

 

3       事例

3.1       使用 CsvDataReader

private static void ExectureReadCsvFile(string p_filepath)

{

    using (CsvDataReader actual = CsvDataReader.ExecuteReader(p_filepath, System.Text.ASCIIEncoding.Default))

    {

        for (int i = 0; i < actual.FieldCount; i++)

        {

            Trace.Write(actual.GetName(i));

            Trace.Write("/t");

        }

        Trace.Write("/r/n");

 

        while (actual.Read())

        {

            for (int i = 0; i < actual.FieldCount; i++)

            {

                Trace.Write(actual.GetString(i));

                Trace.Write("/t");

            }

            Trace.Write("/r/n");

        }

    }

}

 

 

3.2       使用 Importer

Importer importer = new Importer("item.csv", "item_table", "key");

importer.Import();

 


下载

http://download.csdn.net/source/592332

http://download.csdn.net/greenery

注意:样例代码使用了VS2008的部分特性

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值