您的位置:首页 > 数据库

CSV 文件分析与导入数据库

2008-08-28 14:56 211 查看
CSV 文件分析与导入数据库





1 [/b]简介[/b][/b]

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

1.1 [/b]规则[/b][/b]

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

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

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

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

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

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

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

l 内码格式不限,可为ASCII、Unicode或者其他。

1.2 [/b]扩展[/b][/b]

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

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

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

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

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

l 允许空行,程序或略。



2 [/b]程序设计[/b][/b]

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

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







2.1 [/b]CSV[/b]文件读取流程[/b]


[/b][/b]





2.2 [/b]导入数据库流程[/b]


[/b][/b]



2.3 [/b]CsvRow
[/b]类[/b][/b]

类图如下:




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

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



[/b]

[/b]

2.4 [/b]CsvDataReader[/b]类[/b][/b]

类图如下:




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

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

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



2.5 [/b]Importer[/b]类[/b][/b]

类图如下:






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

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

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





3 [/b]事例[/b][/b]

3.1 [/b]使用[/b] CsvDataReader[/b]

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 [/b]使用[/b] Importer[/b]

Importer importer = new Importer("item.csv",
"item_table", "key");
importer.Import();
下载http://download.csdn.net/source/592332http://download.csdn.net/greenery注意:样例代码使用了VS2008的部分特性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: