封装处理下,以后项目用到可以直接使用,比较简单。

1.首先看封装好的类

using System;

using System.Data;

using System.IO;

using System.Text;

using CSharpUtilHelpV2;

using StringUtilHelp;

namespace DBUtilHelpV2Plus

{

public static class DBToolV2Plus

{

/// <summary>

/// 将DataTable导出到CSV.

/// </summary>

/// <param name="table">DataTable</param>

/// <param name="fullSavePath">保存路径</param>

/// <param name="tableheader">标题信息</param>

/// <param name="columname">列名称『eg:姓名,年龄』</param>

/// <returns>导出成功true;导出失败false</returns>

public static bool ToCSV(this DataTable table, string fullSavePath, string tableheader, string columname)

{

ArgumentChecked(table, fullSavePath);

//------------------------------------------------------------------------------------

try

{

string _bufferLine = "";

using (StreamWriter _writerObj = new StreamWriter(fullSavePath, false, Encoding.UTF8))

{

if (!string.IsNullOrEmpty(tableheader))

_writerObj.WriteLine(tableheader);

if (!string.IsNullOrEmpty(columname))

_writerObj.WriteLine(columname);

for (int i = 0; i < table.Rows.Count; i++)

{

_bufferLine = "";

for (int j = 0; j < table.Columns.Count; j++)

{

if (j > 0)

_bufferLine += ",";

_bufferLine += table.Rows[i][j].ToString();

}

_writerObj.WriteLine(_bufferLine);

}

return true;

}

}

catch (Exception)

{

return false;

}

}

/// <summary>

/// 参数检查

/// </summary>

/// <param name="table"></param>

/// <param name="fullSavePath"></param>

private static void ArgumentChecked(DataTable table, string fullSavePath)

{

if (table == null)

throw new ArgumentNullException("table");

if (string.IsNullOrEmpty(fullSavePath))

throw new ArgumentNullException("fullSavePath");

string _fileName = CSharpToolV2.GetFileNameOnly(fullSavePath);

if (string.IsNullOrEmpty(_fileName))

throw new ArgumentException(string.Format("参数fullSavePath的值{0},不是正确的文件路径!", fullSavePath));

if (!_fileName.InvalidFileNameChars())

throw new ArgumentException(string.Format("参数fullSavePath的值{0},包含非法字符!", fullSavePath));

}

/// <summary>

/// 将CSV文件数据导入到Datable中

/// </summary>

/// <param name="table"></param>

/// <param name="filePath">DataTable</param>

/// <param name="rowIndex">保存路径</param>

/// <returns>Datable</returns>

public static DataTable AppendCSVRecord(this DataTable table, string filePath, int rowIndex)

{

ArgumentChecked(table, filePath);

if (rowIndex < 0)

throw new ArgumentException("rowIndex");

using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8, false))

{

int i = 0, j = 0;

reader.Peek();

while (reader.Peek() > 0)

{

j = j + 1;

string _line = reader.ReadLine();

if (j >= rowIndex + 1)

{

string[] _split = _line.Split(',');

DataRow _row = table.NewRow();

for (i = 0; i < _split.Length; i++)

{

_row[i] = _split[i];

}

table.Rows.Add(_row);

}

}

return table;

}

}

}

}

2.代码使用测试

using System;

using System.Data;

using DBUtilHelpV2;

using DBUtilHelpV2Plus;

namespace DBUtilHelpV2PlusTest

{

class Program

{

static DataTable testDb = null;

static string fullSavePath = string.Format(@"C:\{0}.csv", DateTime.Now.ToString("yyyyMMddHH"));

static void Main(string[] args)

{

try

{

CreateTestDb();

Console.WriteLine(string.Format("DataTable导出到CSV文件{0}.", testDb.ToCSV(fullSavePath, "姓名,年龄", "人员信息表") == true ? "成功" : "失败"));

testDb.Rows.Clear();

Console.WriteLine(string.Format("清空数据,当前{0}条数据.", testDb.Rows.Count));

testDb = testDb.AppendCSVRecord(fullSavePath, 2);

Console.WriteLine(string.Format("CSV文件导入到Datable,导入{0}条数据.", testDb.Rows.Count));

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

finally

{

Console.ReadLine();

}

}

static void CreateTestDb()

{

if (testDb == null)

{

testDb = DBToolV2.CreateTable("Name,Age|int");

for (int i = 1; i <= 10; i++)

{

DataRow _row = testDb.NewRow();

_row["Name"] = string.Format("YanZhiwei_{0}", i);

_row["Age"] = i;

testDb.Rows.Add(_row);

}

}

}

}

}

csv文件与DataTable互相导入处理的更多相关文章

  1. 【SQL Server数据迁移】把csv文件中的数据导入SQL Server的方法

    [sql] view plaincopy --1.修改系统参数 --修改高级参数 sp_configure 'show advanced options',1 go --允许即席分布式查询 sp_co ...

  2. 将CSV文件中的数据导入到SQL Server 数据库中

    导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提 ...

  3. 一段刚刚出炉的CSV文件转换为DataTable对象的代码

    CSV是以文本形式保存的表格数据,具体是每列数据使用逗号分割,每行数据使用CRLF(\r\n)来结尾,如果数据值包含逗号或CRLF则使用双引号将数值包裹,如果数据值包含双引号则使用两个双引号做为转义. ...

  4. c# 将csv文件转换datatable的两种方式。

    第一种: public static DataTable csvdatatable(string path) { DataTable dt = new DataTable(); string conn ...

  5. MySQL导入含有中文字段(内容)CSV文件乱码解决方法

    特别的注意:一般的CSV文件并不是UTF-8编码,而是10008(MAC-Simplified Chinese GB 2312),所以再通过Navicat导入数据的时候需要指定的编码格式是10008( ...

  6. 解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG

    解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6 ...

  7. excel打开csv文件乱码解决办法

    参考链接: https://jingyan.baidu.com/article/4dc408484776fbc8d846f168.html 问题:用 Excel 打开 csv 文件,确认有乱码的问题. ...

  8. Python 编程快速上手 第十四章 处理 CSV 文件和 JSON 数据

    前言 这一章分为两个部分,处理 CSV 格式的数据和处理 JSON 格式个数据. 处理 CSV 理解 csv csv 的每一行代表了电子表格中的每一行,每个逗号分开两个单元格csv 的内容全部为文本, ...

  9. Excel打开csv文件乱码问题的解决办法

    excel打开csv 出现乱码怎么解决 https://jingyan.baidu.com/article/ac6a9a5e4c681b2b653eacf1.html CSV是逗号分隔值的英文缩写,通 ...

随机推荐

  1. javaWEB邮件测试

    新建一个工具类: Mail.java 该类的主要关键点是:1.设置系统属性.也就是你是用什么协议来进行邮件发送的,邮件协议有很多在种,比如impt,smpt,prop等协议, 我现在测试用的是smpt ...

  2. PCL—低层次视觉—点云分割(超体聚类)

    1.超体聚类——一种来自图像的分割方法 超体(supervoxel)是一种集合,集合的元素是“体”.与体素滤波器中的体类似,其本质是一个个的小方块.与之前提到的所有分割手段不同,超体聚类的目的并不是分 ...

  3. Android viewPage notifyDataSetChanged无刷新

    转载 http://www.67tgb.com/?p=624 最近项目结束,搞了一次代码分享.其中一位同学分享了一下自己在解决问题过程中的一些心得体会,感觉受益匪浅.整理出来,分享给大家. 建议使用自 ...

  4. [置顶] 手机通过socket控制电脑关机,重启,注销等功能

    服务端 package com.pc; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOE ...

  5. PHP Redis 集群封装类

    <?php /**  * Redis 操作,支持 Master/Slave 的负载集群  *  * @author V哥  */ class RedisCluster{        // 是否 ...

  6. js中的this怎么理解

    本博客供自己学习备忘, js中的this感觉很混乱,目前还有不少地方搞得不是很清楚,看到一篇不错的文章,先摘下来 this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象 ...

  7. Android开发之EventBus的简单使用

    参考: 1.http://blog.csdn.net/harvic880925/article/details/40660137 2.http://blog.csdn.net/harvic880925 ...

  8. grunt + compass

    compass和sass文章列表:http://182.92.240.72/tag/compass/ compass实战grunt: http://wrox.cn/article/2000491/ h ...

  9. git设置对比工具

    windows下设置 beyond compare 3 为 git  的对比工具. 首先需要先安装 beyond compare 3 工具,切记需要安装安装版的,不要搞绿色版的. mac下使用 Kal ...

  10. Web内容管理系统 Magnolia 安装使用-挖掘优良的架构(2)

    在Windows上安装社区版  tomcat集成版 Magnolia CMS社区版本为免费发行,不需要任何GNU通用公共许可协议(第3版)条款下的授权(这个许可协议允许您在特定条款和条件下,重新分配和 ...