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

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. css一个图片包含多个图片|网站侧栏导航

    <html> <head><title>Hello World</title> <style> .style1{ width:60px;ma ...

  2. go的优缺点

    1.1 不允许左花括号另起一行1.2 编译器莫名其妙地给行尾加上分号1.3 极度强调编译速度,不惜放弃本应提供的功能1.4 错误处理机制太原始1.5 垃圾回收器(GC)不完善.有重大缺陷1.6 禁止未 ...

  3. MSSQLServer基础06(变量,case,选择语句)

    变量 声明:declare @UserName nvarchar(50) 赋值1:set @UserName=N'杨':修改 赋值2:select @UserName=N'牛':修改 输出:print ...

  4. Android Include标签

    编程的世界有的时候很微妙,有的时候就好像是在解决一个哲学问题,Android开发的时候,所有的布局,颜色,等(其实这些都可以称之为资源,Android中的资源是指非代码部分,如图片.音频.视频.字符等 ...

  5. 一个zip压缩类,欢迎吐槽

    package com.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import j ...

  6. DoG 、Laplacian、图像金字塔详解

    DoG(Difference of Gaussian) DoG (Difference of Gaussian)是灰度图像增强和角点检测的方法,其做法较简单,证明较复杂,具体讲解如下: Differe ...

  7. Log4j具体使用实例

    首先,下载log4j.jar架包(网上很多,随便下载一个就可以了), 第一步:新建java项目,Testlog4j,再在src中建立com.Testlog4j包,再建一个testlog4j.java文 ...

  8. Java 知识点:序列化

    首先明确一点:默认的序列化方法速度很慢,因为需要对整个对象和他的类都进行保存,因此我们建议自定义序列化格式. ObjectInputStream和ObjectOutputStream 用途 Objec ...

  9. Java [Leetcode 144]Binary Tree Preorder Traversal

    题目描述: Given a binary tree, return the preorder traversal of its nodes' values. For example:Given bin ...

  10. oracle中怎么查看存储过程的源码

    今天想找几天前写的存储过程的源码看看,发现自己熟悉的命令怎么都不好使,要不提示标示符错误要不就是提示未选定行,通过baidu得知type跟name变量要弄成大写的.. select text from ...