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

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. spring webservice 开发demo (实现基本的CRUD 数据库采用H2)

    在实现过程中,遇到两个问题: 1: schema 写错: 错误: http://myschool.com/schemas/st 正确: http://myschool.com/st/schemas   ...

  2. Shell脚本的编写

    筛选后统计总数 cat logs | grep IconsendRedirect | wc -l >> bb.log 筛选后分类统计并且排序 cat logs | grep Iconsen ...

  3. Socket称"套接字"

    Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 二.利用Socket建立网络连接的步骤 建立Socket连接至少需要一对 ...

  4. jQuery编程基础精华03(RadioButton操作,事件,鼠标)

    RadioButton操作 取得RadioButton的选中值,被选中的radio只有一个值,所以直接用val()  $('#btn1').click(function () {           ...

  5. Lua表的构造及遍历

    关于lua中的table,主要的困惑来自于table既可以当array用又可以当record用,有时候就会混淆不清. lua中的table貌似是用map来实现的,array是语法糖,一种特例.下面是l ...

  6. intellij idea 注释行如何自动缩进?

    我们指代代码注释的快捷键是 Ctrl+/ 但是加注释后"//"自动放在行首,没缩进,就像这样

  7. Java API —— TreeMap类

    1.TreeMap类概述         键是红黑树结构,可以保证键的排序和唯一性 2.TreeMap案例         TreeMap<String,String>         T ...

  8. 关于为什么java需要垃圾回收

    为什么java采用垃圾回收而c++却不采用,这是因为在java中,所有对象变量都是引用,当一个引用被新对象覆盖掉时,就没有引用指向原来的对象了,这个对象就“失控了”. 而C++中,除非使用特殊符号&a ...

  9. Eclipse中查看JDK源码设置

    设置方法如下: 1.路径 window-> Preferences -> Java -> Installed JRES 2.此时"Installed JRES"右 ...

  10. Android权限安全(11)内置计费相关安全要点

    内置计费相关安全要点 1.计费Server接口保密且Transiction 加密 (SSL) 2.仅允许配套的安全本地组件(通常是第三方付费sdk如支付宝)与计费Server通信,且安全本地组件负责与 ...