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

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. lintcode 中等题:permutations II 重复数据的全排列

    题目 带重复元素的排列 给出一个具有重复数字的列表,找出列表所有不同的排列. 样例 给出列表 [1,2,2],不同的排列有: [ [1,2,2], [2,1,2], [2,2,1] ] 挑战 使用递归 ...

  2. Project Euler 76:Counting summations

    题目链接 原题: It is possible to write five as a sum in exactly six different ways: 4 + 13 + 23 + 1 + 12 + ...

  3. *[codility]CartesianSequence

    https://codility.com/programmers/challenges/upsilon2012 求笛卡尔树的高度,可以用单调栈来做. 维持一个单调递减的栈,每次进栈的时候记录下它之后有 ...

  4. React-Flux 介绍及实例演示

    一.Flux架构 二.例子 1.TodoApp.react.js /** * Copyright (c) 2014-2015, Facebook, Inc. * All rights reserved ...

  5. React-用Jest测试

    一. 1.目录结构 二.代码 1.CheckboxWithLabel.jsx var React = require('react/addons'); var CheckboxWithLabel = ...

  6. 258. Add Digits

    题目: Given a non-negative integer num, repeatedly add all its digits until the result has only one di ...

  7. chmod u+x 脚本文件

    [root@ossec-server Shell]# chmod u+x whologged.sh解释: chmod:改变权限 u:文件所有用户 +x: 增加可执行权限 [root@ossec-ser ...

  8. 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序(老罗学习笔记2)

    在前一篇文章中,我们介绍了如何在Ubuntu上为Android系统编写Linux内核驱动程序.在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文 ...

  9. C语言中的宏展开

    #include<stdio.h> #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int main() { printf(,) ...

  10. Android Studio设备背景色

    从eclipse转到Android Studio. Android Studio的一些设置 1.设置字体大小:Settings->Editor->Colors&Fonts-> ...