共享组件(有码):将文件中数据导入到DataTable
2008-10-29 00:03
211 查看
(08-11-29日更新,增加了Xls和Xlsx文件导入支持)
1. 功能:
1.1. 自由配置文件格式:生成的DataTable的主键、文件内容中是否有表头、列分隔符、列是否可空、列中数据类型(String型可加长度限制)、列是否导进DataTable(过滤文件中的列,不读入DataTable);
1.2. 支持TXT、CSV、XLS、XLSX四种格式;
1.3. 生成错误信息报告:支持读到N条错误数据后,终止文件解析(N在config文件中配置);
1.4. 解析大文件时,支持行读;
1.5. 支持传入文件名或者Stream(例如Web上传后直接取得数据流)
2. 使用示例:
2.1 数据文件(数据保存成DemoDataFile.txt)
happyhippy|other info|1984-9-11|
test|unuseful info|9999-12-30|0
或(带表头信息的数据):
雇员姓名|无用信息不用导入|生日|薪水
happyhippy|other info|1984-9-11|
test|unuseful info|9999-12-30|0
2.2 配置定义
XmlDocument dom = new XmlDocument();
dom.Load("demoSchema.xml"); //可以将配置定义放在数据库或其他地方
string schema = dom.InnerXml;
ImportTxtFile(schema);
ImportXlsFile(schema);
private static void ImportXlsFile(string schema)
private static void ImportTxtFile(string schema)
{
string fileFullName = "DemoDataFile.txt";
DataTable resultDT = null;
try
{
//法1:传入文件名,按schema中的配置进行解析
resultDT = ImportHelper.Import(fileFullName, schema);
//法2:文件流解析
using (Stream fileStram = new FileStream(fileFullName, FileMode.Open, FileAccess.Read))
{
resultDT = ImportHelper.Import(fileStram, schema, FlatFileType.TXT);
}
//法3:如果数据量大,可以进行行读:
using (FlatFileReader reader = FlatFileReader.GetFlatFileReader(fileFullName, schema))
{
reader.CheckHeadRow();
int totelCount = 0; //记录读了多少行
while (reader.Read())
{
if (reader.ReadRow(totelCount + 1))
totelCount++;
if (totelCount % 500 == 0) //每批读500条记录
{
resultDT = reader.GetResultTable();//接下来可以对resultDT进行处理
reader.ClearResultTable();
}
}
if (totelCount % 500 > 0)
{
resultDT = reader.GetResultTable(); //最后一批记录
//接下来可以对resultDT进行处理
}
if (reader.ErrorInfoTable != null && reader.ErrorInfoTable.Rows.Count > 0)
throw new ErrorFileException("解析文件出错", reader.ErrorInfoTable);
}
}
catch (ErrorFileException efex)
{
DataTable errorInfoTable = efex.ErrorInfoDataTable;//存储了错误信息的DataTable
}
}
3. 源代码下载:Happyhippy.ImpotFile.rar
4. 程序结构:
5. 遗留问题:
5.1. CSV读取方式中,禁止将内容转换成数字;
1. 功能:
1.1. 自由配置文件格式:生成的DataTable的主键、文件内容中是否有表头、列分隔符、列是否可空、列中数据类型(String型可加长度限制)、列是否导进DataTable(过滤文件中的列,不读入DataTable);
1.2. 支持TXT、CSV、XLS、XLSX四种格式;
1.3. 生成错误信息报告:支持读到N条错误数据后,终止文件解析(N在config文件中配置);
1.4. 解析大文件时,支持行读;
1.5. 支持传入文件名或者Stream(例如Web上传后直接取得数据流)
2. 使用示例:
2.1 数据文件(数据保存成DemoDataFile.txt)
happyhippy|other info|1984-9-11|
test|unuseful info|9999-12-30|0
或(带表头信息的数据):
雇员姓名|无用信息不用导入|生日|薪水
happyhippy|other info|1984-9-11|
test|unuseful info|9999-12-30|0
2.2 配置定义
XmlDocument dom = new XmlDocument();
dom.Load("demoSchema.xml"); //可以将配置定义放在数据库或其他地方
string schema = dom.InnerXml;
ImportTxtFile(schema);
ImportXlsFile(schema);
private static void ImportXlsFile(string schema)
private static void ImportTxtFile(string schema)
{
string fileFullName = "DemoDataFile.txt";
DataTable resultDT = null;
try
{
//法1:传入文件名,按schema中的配置进行解析
resultDT = ImportHelper.Import(fileFullName, schema);
//法2:文件流解析
using (Stream fileStram = new FileStream(fileFullName, FileMode.Open, FileAccess.Read))
{
resultDT = ImportHelper.Import(fileStram, schema, FlatFileType.TXT);
}
//法3:如果数据量大,可以进行行读:
using (FlatFileReader reader = FlatFileReader.GetFlatFileReader(fileFullName, schema))
{
reader.CheckHeadRow();
int totelCount = 0; //记录读了多少行
while (reader.Read())
{
if (reader.ReadRow(totelCount + 1))
totelCount++;
if (totelCount % 500 == 0) //每批读500条记录
{
resultDT = reader.GetResultTable();//接下来可以对resultDT进行处理
reader.ClearResultTable();
}
}
if (totelCount % 500 > 0)
{
resultDT = reader.GetResultTable(); //最后一批记录
//接下来可以对resultDT进行处理
}
if (reader.ErrorInfoTable != null && reader.ErrorInfoTable.Rows.Count > 0)
throw new ErrorFileException("解析文件出错", reader.ErrorInfoTable);
}
}
catch (ErrorFileException efex)
{
DataTable errorInfoTable = efex.ErrorInfoDataTable;//存储了错误信息的DataTable
}
}
3. 源代码下载:Happyhippy.ImpotFile.rar
4. 程序结构:
5. 遗留问题:
5.1. CSV读取方式中,禁止将内容转换成数字;
相关文章推荐
- RAC使用共享存储,使用数据泵导入时,数据文件存放位置查询
- java基于xml配置的通用excel单表数据导入组件(二、xml配置文件解析加载)
- Excel文件导入到SQL Server——2007 Office system 驱动程序:数据连接组件
- 把数据从DataTable导入到Excel文件里并创建表
- SQL : 一个存储过程,用于向指定的MS SQL Table中导入CSV 格式的文件数据
- ASP.NET中使用开源组件NPOI快速导入导出Execl数据
- 结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程
- 用C++实现一元多项式的四则运算包括数据的文件导入与导出
- bcp-数据导入导出-二进制文件
- 将指定excel文件中的数据转换成datatable对象,供应用程序进一步处理
- mysql数据导入到redis,redis数据导出到文件备份
- 将excel文件中的数据导入到mysql
- 如何将.SQL文件的数据导入到Mysql的数据库中
- sql Server 批量插入以及sql Server数据导入到mysql sqlServer数据每10000条导出一个文件
- VOS2009/VOS3000最新手机号段导入文件(2017年最新手机归属地数据)
- C# 向共享文件中写入数据
- 将Control List中的数据导入类Excel的表格中,(使用了.csv文件)
- [PL/SQL]导入文件内的数据到数据库(针对本博的导出存储过程)
- 使用T-SQL导入多个文件数据到中
- 导入excel文件时,弹出提示框说“文件出错,可能某些数据丢失“