码迷,mamicode.com
首页 > 其他好文 > 详细

[C#]csv文件与DataTable互相导入处理

时间:2014-04-30 15:47:46      阅读:470      评论:0      收藏:0      [点我收藏+]

标签:com   http   blog   style   class   img   code   size   log   c   tar   

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

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);
                }
            }
        }
    }
}

mamicode.com,码迷

mamicode.com,码迷

[C#]csv文件与DataTable互相导入处理,码迷,mamicode.com

[C#]csv文件与DataTable互相导入处理

标签:com   http   blog   style   class   img   code   size   log   c   tar   

原文地址:http://www.cnblogs.com/Yan-Zhiwei/p/3699484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!