csv文件与DataTable互相导入处理
封装处理下,以后项目用到可以直接使用,比较简单。
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互相导入处理的更多相关文章
- 【SQL Server数据迁移】把csv文件中的数据导入SQL Server的方法
[sql] view plaincopy --1.修改系统参数 --修改高级参数 sp_configure 'show advanced options',1 go --允许即席分布式查询 sp_co ...
- 将CSV文件中的数据导入到SQL Server 数据库中
导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提 ...
- 一段刚刚出炉的CSV文件转换为DataTable对象的代码
CSV是以文本形式保存的表格数据,具体是每列数据使用逗号分割,每行数据使用CRLF(\r\n)来结尾,如果数据值包含逗号或CRLF则使用双引号将数值包裹,如果数据值包含双引号则使用两个双引号做为转义. ...
- c# 将csv文件转换datatable的两种方式。
第一种: public static DataTable csvdatatable(string path) { DataTable dt = new DataTable(); string conn ...
- MySQL导入含有中文字段(内容)CSV文件乱码解决方法
特别的注意:一般的CSV文件并不是UTF-8编码,而是10008(MAC-Simplified Chinese GB 2312),所以再通过Navicat导入数据的时候需要指定的编码格式是10008( ...
- 解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG
解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6 ...
- excel打开csv文件乱码解决办法
参考链接: https://jingyan.baidu.com/article/4dc408484776fbc8d846f168.html 问题:用 Excel 打开 csv 文件,确认有乱码的问题. ...
- Python 编程快速上手 第十四章 处理 CSV 文件和 JSON 数据
前言 这一章分为两个部分,处理 CSV 格式的数据和处理 JSON 格式个数据. 处理 CSV 理解 csv csv 的每一行代表了电子表格中的每一行,每个逗号分开两个单元格csv 的内容全部为文本, ...
- Excel打开csv文件乱码问题的解决办法
excel打开csv 出现乱码怎么解决 https://jingyan.baidu.com/article/ac6a9a5e4c681b2b653eacf1.html CSV是逗号分隔值的英文缩写,通 ...
随机推荐
- lintcode:Number of Islands 岛屿的个数
题目: 岛屿的个数 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 样例 在矩阵: [ [1, 1, 0, 0, 0], ...
- 2.Sprng-IoC-Java反射例子
1.Car.java package com.jike.spring.chapter03.reflect; public class Car { private String brand; priva ...
- SoapUI test WCF
http://blogs.msdn.com/b/nabeelp/archive/2008/03/07/obscure-error-addressfilter-mismatch-at-the-endpo ...
- MFC编程入门
一. 什么是MFC? 如果你要建立一个Windows应用程序,应该如何下手? 好的开端是从设计用户界面开始. 首先,你要决定什么样的用户能使用该程序并根据需要来设置相应的用户界面对象.Windows用 ...
- javascript正则表达式控制input只能输入数字
不能输入中文 <input type="text" name="textfield" onkeyup="this.value=this.val ...
- php模拟用户自动在qq空间发表文章的方法
我们这里是一个简单的利用php来模拟登录后再到QQ空间发送文章的一个简单的程序,有需要的朋友可以参考,或改进可以给我意见,代码如下: <?php //模拟get post请求函数 http:// ...
- 传感器(3)传感器的X,Y,Z轴
设备正面水平向上. X轴 : 左右方向,向右是正值. Y轴 : 远近方向,远离你是负. Z轴 : 上下方向,向上是正值.
- jquery学习以及下载链接
jquery学习链接 http://www.w3school.com.cn/jquery/jquery_intro.asp jquery 脚本库下载链接 http://jquery.com/downl ...
- Nginx+Tomcat+Memcached 集群
写过一篇 Apache Httpd+Tomcat 的集群, 现在来看看Nginx+Tomcat+Memcached是怎么集群的. 先看看用的版本和工具: Nginx: nginx-1.8.1 Tomc ...
- C++ 中字符串标准输入的学习及实验
声明:下面实验中[]里面表示要输入里面的符号,[]符号本身并未输入 1.cin>> cin使用空白(空格.制表符.回车)来确定字符串的结束位置. cin会将换行符留在输入输出队列中. #i ...