C#中csv文件与DataTable互相导入处理实例解析

所属分类: 软件编程 / C#教程 阅读数: 78
收藏 0 赞 0 分享

本文介绍了C#中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);
        }
      }
    }
  }
}

运行效果如下图所示:

更多精彩内容其他人还在看

C#抽象类与抽象方法详解

这篇文章主要为大家详细介绍了C#抽象类与抽象方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#代码实现扑克牌排序的几种方式

今天小编就为大家分享一篇关于C#代码实现扑克牌排序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#泛型概念的简介与泛型的使用

今天小编就为大家分享一篇关于C#泛型概念的简介与泛型的使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C# 7.0 使用下划线忽略使用的变量的原因分析

这篇文章主要介绍了C# 7.0 使用下划线忽略使用的变量的原因浅析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C# 中使用正则表达式匹配字符的含义

正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

C# Dictionary和SortedDictionary的简介

今天小编就为大家分享一篇关于C# Dictionary和SortedDictionary的简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#中SQL Command的基本用法

今天小编就为大家分享一篇关于C#中SQL Command的基本用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataReader访问数据的优点和实例

今天小编就为大家分享一篇关于C#使用SQL DataReader访问数据的优点和实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL Dataset数据集代码实例

今天小编就为大家分享一篇关于的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataAdapter数据适配代码实例

今天小编就为大家分享一篇关于C#使用SQL DataAdapter数据适配代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享
查看更多